【发布时间】:2018-05-03 16:04:37
【问题描述】:
我在处理一些 Myqsli 查询时遇到了一些问题。
$sqlselect = "SELECT visitatori_id FROM visitatori WHERE visitatori_nome='".$nome."' AND visitatori_cognome='".$cognome."' AND
visitatori_orastart='".$time."' AND visitatori_idsede='".$idsede."'";
if ($conn->query($sqlselect) === TRUE)
{
$resultz = $conn->query($sqlselect);
$rowz = $resultz->fetch_assoc();
$id = $rowz["visitatori_id"];
$data = date('dmY');
$arr = $id."/".$data.$idref.$idrep.$idsede;
$JSON->value = $arr;
$json = json_encode($JSON);
echo $json;
break;
}
else
{
$JSON->value = $conn->error;
$json = json_encode($JSON);
echo $json;
break;
}
在数据库上启动的查询完全没有问题。
但是如果我尝试在 PHP 代码中启动它,if 返回false,而$conn->error 只是""。
我进行了很多搜索,但找不到任何至少可以向我显示错误的内容。
编辑
我知道这段代码可以注入,但是在mysqli语句之前我总是用正常查询做一些测试,无论如何感谢提醒。
【问题讨论】:
-
您的代码容易受到SQL injection attacks 的攻击。您应该通过mysqli 或PDO 驱动程序使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
-
^ 不只是 SQL 注入攻击,引用也很头疼。切换到准备好的语句,这些令人头疼的问题就消失了。
-
=== 检查 EXACT 条件...也就是您的查询是否返回 true...如果返回 NOT FALSE 则不一定
-
为什么不使用准备好的语句?只要查询中有变量,准备好的语句在所有方面都更好地转义它们。
-
@PhillipWeber 差异真的可以忽略不计。如果您认为您可以编写一些比 PHP 方面的人更好的代码,他们会很高兴 - 但实际上,准备好的语句是要走的路,它在所有方面都优于转义输入。如果您如此依赖速度,那么在优化之前您应该考虑许多其他方面。
标签: javascript php jquery mysql ajax