Php 准备好的声明,写对了吗?

Php 准备好的声明,写对了吗?,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我一直在花时间学习MySQLi中的预处理语句。我使用David Powers的PHP解决方案第二版作为参考 此查询从特定库中提取随机照片文件名。画廊编号是一个变量($i)。这是工作,我只是想知道它是否写得正确。我的网站相当简单,但我想避免SQL注入 $conn = dbConnect('query'); $randPic = "SELECT p_fname FROM photos WHERE g_id = ? ORDER by RAND()

我一直在花时间学习MySQLi中的预处理语句。我使用David Powers的PHP解决方案第二版作为参考

此查询从特定库中提取随机照片文件名。画廊编号是一个变量($i)。这是工作,我只是想知道它是否写得正确。我的网站相当简单,但我想避免SQL注入

$conn = dbConnect('query');
$randPic = "SELECT p_fname
        FROM photos
        WHERE g_id = ?
        ORDER by RAND()
        LIMIT 1";
$gid = $i;
$stmt = $conn->prepare($randPic);
$stmt->bind_param('i', $gid);
$stmt->bind_result($p_fname);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();
在需要随机照片的页面上,我可以通过变量调用它:

echo $p_fname;

再说一次,这一切都起作用了。我只是想知道这是否正确编码。

是的,您的查询写得很好


输出数据时要小心。如果输出HTML页面的变量数据,请使用
htmlspecialchars()
避免意外地将HTML注入页面。

是的,您的查询写得很好


输出数据时要小心。如果输出HTML页面的变量数据,请使用
htmlspecialchars()
避免意外地将HTML注入页面。

Brad,非常感谢您!$p_fname中包含的值只是一个文件名。还有很多PHP我需要学习,你能给我一个例子来说明你的意思吗?还有…我读到在这样一个查询之后,我应该使用free_result()或close(),但我不知道哪一个是最好的。任何建议都将不胜感激。谢谢@wordman,文件名的风险很低,但在任何情况下都要遵循这一做法。例如,假设您输出的某些文本中有引号
。您的HTML可能看起来像:
,这会混淆解析器,并且不是有效的HTML。使用
htmlspecialchars()
将把输出更改为
@wordman,如果您的脚本在运行该查询后没有做太多工作,则确实不需要关闭任何内容。您的脚本将结束,内存将自动释放。另请参见:这正是我需要的解释类型,谢谢!我必须对此主题进行一些额外的研究.Brad,非常感谢你!$p_fname中包含的值只是一个文件名。我还需要学习很多PHP,你能给我一个例子来说明你的意思吗?另外…我读到在这样一个查询之后,我应该使用free_result()或close()但是我不知道哪一个是最好的。如果您有任何建议,我们将不胜感激。谢谢!@wordman,文件名的风险很低,但在任何情况下都可以遵循。例如,假设您输出的文本中有引号
。您的HTML可能看起来像:
这会混淆解析器,并且不是有效的HTML。使用
htmlspecialchars()
会将该输出更改为
@wordman,如果您的脚本在运行该查询后没有做太多工作,那么确实不需要关闭任何内容。脚本将结束,内存将自动释放。另请看:这正是我需要的解释类型,谢谢!我必须在这个问题上做一些额外的研究。