如何在不访问数据库连接的情况下Mysqli转义字符串?

时间:2019-05-29 21:59:03

标签: php mysql mysqli

我正在尝试修改一些代码,如果可能的话,我想使用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注入的风险,而不必更改执行查询的功能。但是我还是会研究建议的解决方案。谢谢。

1 个答案:

答案 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。