【发布时间】:2018-12-11 02:59:05
【问题描述】:
我已经筋疲力尽地寻找并寻找我的确切情况。我想了解为什么这不起作用,我还想确保这个逻辑对于注入黑客来说是更安全。我知道没有什么是 100% 安全的。以下代码不起作用:
$query= mysqli_prepare($con,"SELECT * FROM *table*
WHERE Resource = ? AND WorkDate >= ? AND WorkDate <= ? ORDER BY WorkDate, StartTime" );
mysqli_stmt_bind_param($query, "sss", $resource, $from, $to);
mysqli_execute($query);
if (!mysqli_stmt_execute($query))
{
die('Error: ' . mysqli_error());
}
mysqli_stmt_store_result($query);
mysqli_stmt_fetch($query);
$result= mysqli_query($con,$query, MYSQLI_STORE_RESULT); // or die("Could not get results: ".mysqli_error());
while($rows=mysqli_fetch_array($result)){<fill in table>
此代码在 $result 行中终止。我已经完成了查询和所有变量的 var_dumps。当我 var_dump 查询时,它会正确告诉我受影响的行。所以对我来说,这意味着准备好的声明正在发挥作用。但是当我尝试运行查询时,我可以获取它以在我的屏幕上输出数据。
现在这适用于 mysql,但我正在尝试将其转换为 mysqli 以避免注入。本来整个 sql 语句就位,但现在使用准备好的语句来避免这种情况。
【问题讨论】:
-
错误信息是什么?您已设置错误报告级别 (E_ALL) 并检查日志或显示错误?
-
FROM *table*那是你的实际代码吗? -
另外
$query是一个mysqli语句对象,你不能把它传递给mysqli_query()。 -
针对
mysqli使用的有用的通用错误追踪将ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);添加到脚本的顶部。这将强制任何mysqli_错误生成一个您可以在浏览器上看到的异常,并且其他错误也将在您的浏览器上可见。 -
table 只是一个占位符。应该是斜体。