我在PHP文件中有这个查询:
return $this->_getDb()->fetchRow('
SELECT *
FROM xf_user
WHERE user_id = ?
', $userId);
最后一行做了什么,在谷歌上快速查看之后我发现问号是一个动态参数。谁能给我一个更详细的解释呢?感谢。
答案 0 :(得分:3)
嗯,你错过了命令的一部分(注意不平衡的引用)。我怀疑你在开头就留下了一两行。(用户编辑了帖子以包含缺失的行)。
参数的作用是获取参数的值($ userID变量中保存的值)并使用它来评估SQL查询。因此,如果$ userID包含值101,则执行的查询基本上为SELECT * FROM xf_user WHERE user_id = 101
。
但是,使用参数不同于简单地将查询构造为文本语句,因为参数是经过类型检查的,并且可以安全地防止SQL注入攻击。此外,使用$ userID中的新值执行多次相同的命令将执行得更快,因为SQL引擎只能“准备”一次语句而不是每次执行它。
答案 1 :(得分:1)
答案 2 :(得分:0)
看起来你正在准备一份准备好的声明。允许您“准备”一个查询,期望在MySQL服务器上传递给它的动态参数。然后,您可以在单独的操作中发送必要的参数。
这可以提供一些性能优势,但也可以在防止SQL注入攻击方面提供巨大的安全优势。
虽然看起来你不是在使用MySQLI,但你可以阅读PHP mysqli :: prepare文档以获取更多背景信息: