关于SQL的两件事我不太懂

时间:2012-09-14 15:41:33

标签: php sql

我在PHP文件中有这个查询:

return $this->_getDb()->fetchRow('
SELECT *
FROM xf_user
WHERE user_id = ?
', $userId);

最后一行做了什么,在谷歌上快速查看之后我发现问号是一个动态参数。谁能给我一个更详细的解释呢?感谢。

3 个答案:

答案 0 :(得分:3)

嗯,你错过了命令的一部分(注意不平衡的引用)。我怀疑你在开头就留下了一两行。(用户编辑了帖子以包含缺失的行)。

参数的作用是获取参数的值($ userID变量中保存的值)并使用它来评估SQL查询。因此,如果$ userID包含值101,则执行的查询基本上为SELECT * FROM xf_user WHERE user_id = 101

但是,使用参数不同于简单地将查询构造为文本语句,因为参数是经过类型检查的,并且可以安全地防止SQL注入攻击。此外,使用$ userID中的新值执行多次相同的命令将执行得更快,因为SQL引擎只能“准备”一次语句而不是每次执行它。

答案 1 :(得分:1)

阅读这篇文章:

http://www.unixwiz.net/techtips/sql-injection.html

您需要特别注意的段落名为“使用绑定参数(PREPARE语句)”

希望这有帮助。

答案 2 :(得分:0)

看起来你正在准备一份准备好的声明。允许您“准备”一个查询,期望在MySQL服务器上传递给它的动态参数。然后,您可以在单独的操作中发送必要的参数。

这可以提供一些性能优势,但也可以在防止SQL注入攻击方面提供巨大的安全优势。

虽然看起来你不是在使用MySQLI,但你可以阅读PHP mysqli :: prepare文档以获取更多背景信息:

http://php.net/manual/en/mysqli.prepare.php