9

我正在将 PHP 与 MySQLi 一起使用,并且我遇到了类似的查询

SELECT $fields FROM $table WHERE $this=$that AND $this2=$that2

到目前为止,我已经编写了一些代码来拼接我给它的数组,例如:

$search = array(name=michael, age=20) //turns into
SELECT $fields FROM $table WHERE name=michael AND age=20

有没有更有效的方法来做到这一点?

我相当担心 MySQL 注入 - 这似乎很容易受到攻击。谢谢!

4

1 回答 1

19

奇怪的是,您问题的标题基本上就是它的答案。你想做这样的事情,使用 mysqli 参数化查询:

$db = new mysqli(<database connection info here>);
$name = "michael";
$age = 20;

$stmt = $db->prepare("SELECT $fields FROm $table WHERE name = ? AND age = ?");
$stmt->bind_param("si", $name, $age);
$stmt->execute();
$stmt->close();

更多信息在手册的 mysqli 部分,特别是与MySQLi_STMT相关的函数。

请注意,我个人更喜欢使用PDO而不是 mysqli,我不喜欢 mysqli 所做的所有bind_param/bind_result 东西。如果我必须使用它,我会围绕它编写一个包装器,使其更像 PDO。

于 2009-04-08T02:02:25.340 回答