将此MySQLi查询编写为预准备语句

时间:2012-12-06 02:07:58

标签: php mysqli prepared-statement

我有一个现有的MySQLi查询:

$conn = dbConnect('query');
$galNumb = "SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project = {$project}";
$gNumb = $conn->query($galNumb);
$row = $gNumb->fetch_row();
$galTotal = $row[0];

这会计算每个项目的图库数量,这些图库与$ project中包含的查询字符串中的值相匹配。

与准备好的陈述相比,它完美但不安全。我已经研究了两天,无法学习如何将此陈述作为准备好的陈述。任何和所有的帮助将被疯狂地赞赏。

更新 我坐在裤子的座位上。我只需要展示如何将上面的代码编写为预处理语句。这种事情并没有像学习PHP那样引起我的大脑的共鸣,我只是没有得到任何这一点。 PHP手册令人困惑,似乎是为那些已经了解PHP的人编写的。

简而言之,我需要上面代码的预准备语句版本,以便我可以在页面上回显结果。目前,我的数据库中的数字应为3,并且始终返回1.

我希望我知道的更多,以便我能更好地表达我的问题,但唉,我还在学习。道歉。

更新2: 基于建议和研究,我编写了这个查询,但它始终返回值1,无论数据库中实际存在什么:

$galNumb = "SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project_part = ?";
$stmt = $conn->prepare($galNumb);
$stmt->bind_param('i', $project);
$gNumb = $stmt->execute();

同样,我想做的就是COUNT每个项目中有多少个画廊。我知道这应该很简单但不适合我。目前DB中有1个项目,有3个画廊。查询应返回3.

2 个答案:

答案 0 :(得分:3)

这很简单。这将准备一个sql语句,执行它并获取第一行。

<?php

// create the prepared statement
$stmt = $conn->prepare('SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project = ?');

// bind a variable to the statment
// the character denotes the type of the variable
// 's' for string
// 'i' for integer
$stmt->bind_param('i', $project);

// execute the query
$stmt->execute();

// get the result variable
$result = $stmt->get_result();

// fetch the row
$row = $result->fetch_row();

if ($row) {
    echo "The count is " . $row[0]; 
}

?>

文档很简单。你在底部有一个代码示例。

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

答案 1 :(得分:2)

$stmt = $dbConnection->prepare('SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project = ?');
$stmt->bind_param('s', $project);

$stmt->execute();