我正在尝试修改一些代码,如果可能的话,我想使用mysqli代替mysqli。这就是今天的样子。
$query = sprintf("select * from table where column = '%s';",mysql_escape_string($value));
$result = do_query_mysqli($query, __FILE__, __LINE__);
函数do_query_mysqli在另一个文件中,如果可能,我不想修改该文件。该功能还包括用于连接到数据库的$ link。
我无权访问正在修改的文件中的$ link。
如果我想获得相似的结果但我无权访问$ link,那么下面代码的最佳替代方法是什么?
$value = mysqli_real_escape_string($link, $value);
谢谢!
编辑- 答案和注释均未解决我的问题,即我试图降低sql注入的风险,而不必更改执行查询的功能。但是我还是会研究建议的解决方案。谢谢。
答案 0 :(得分:2)
使用mysqli避免SQL注入,我发现最好使用bind_param和bind_result。
$select1 = $con->prepare("SELECT jobnumber ,starttime ,endtime, title from JobSheet WHERE starttime BETWEEN ? AND ?;");
$select1->bind_param('ss', $mondayMidnight, $sundayMidnight);
$select1->bind_result($jobnumber, $starttime, $endtime, $title);
$select1->execute();
仅选择您感兴趣的列来满足您使用的查询也是一种很好的做法。 SELECT * FROM ...
是一个雷区,一个程序错误正等待发生(有人更改表格时)。
bind_param不允许SQL注入,因为已经准备好SQL。