我理解mysql语句如何容易受到攻击的基本思路,但每次我尝试找到一个有用的指南时,用PDO实现这一点的方法看起来都是不同的.此外,我有时会在stackoverflow告诉我,我的代码很容易受到影响,例如前几天有关于以下内容的说法(这不适用于btw,但我被教导如何实现它:
$search = $_GET["search"];
$searcharray = explode('|', $search);
$query=("SELECT username,sender,message,subject,timestamp,threadid,msgtype
FROM Messages WHERE ('" . implode("'|'",$searcharray) . "') IN CONCAT
(message,subject) ORDER BY timestamp");
Run Code Online (Sandbox Code Playgroud)
.. 但为什么?是否还不够:
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
Run Code Online (Sandbox Code Playgroud)
在代码和之前
$result = $conn->query($query)->fetchAll(PDO::FETCH_OBJ);
Run Code Online (Sandbox Code Playgroud)
然后?
人们是否自动假设我没有这些部分,因为我只发布与我的问题相关的部分,或者我的SELECT语句的一部分本身是否容易受到攻击?另外,我是否需要PDO-ify所有mysql语句,所以不仅需要SELECT而且UPDATE,INSERT等需要更新吗?
提前致谢!
我正在尝试使用foreach循环迭代数组中的每个项目,但它只捕获最后一个项目而不会迭代第一个项目.我已经删除了代码以仅显示相关部分并添加了一些命令来识别上述问题.
$message == "kk,ll";
$myArray = explode(',', $message);
print_r ($myArray);
foreach ($myArray as $value);
{
echo "$value <br>";
$array[] = $value;
}
print_r ($array);
Run Code Online (Sandbox Code Playgroud)
输出是:
Array ( [0] => kk [1] => ll ) ll
Array ( [0] => ll )
Run Code Online (Sandbox Code Playgroud)
你可以看到我使用print_r()数组时包含两个项目.但foreach循环只循环到最后一项.将数组元素添加到循环内的新数组中也最终得到一个只包含最后一个元素的数组.我究竟做错了什么?
我已经对此进行了研究,但是找到的答案并没有解决我的问题。我想将所有用户名项更改为 'kk',但之后打印数组显示没有任何更改。可能有什么问题?
<?php
$myArray = Array(
0 => Array(
'sender' => kk,
'message' => hhiui,
'timestamp' => '2017-02-04 10:04:57',
'username' => '',
'msgtype' => 0,
'threadid' => 20737047302042017230457
) ,
1 => Array(
'sender' => kk,
'message' => hhiui,
'timestamp' => '2017-02-04 10:04:57',
'username' => '',
'msgtype' => 0,
'threadid' => 20737047302042017230457
) ,
2 => Array(
'sender' => kk,
'message' => hhiui,
'timestamp' => '2017-02-04 10:04:57',
'username' => '',
'msgtype' => '16',
'threadid' => 20737047302042017230457
)
);
foreach($myArray as …Run Code Online (Sandbox Code Playgroud)