【问题标题】:Writing this MySQLi query as a prepared statement将此 MySQLi 查询编写为准备好的语句
【发布时间】:2012-12-06 02:07:57
【问题描述】:

我有一个现有的 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();

再次,我想做的就是计算每个项目中有多少画廊。我知道这应该很简单,但它不适合我。数据库中目前有 1 个项目和 3 个画廊。查询应返回 3。

【问题讨论】:

  • 你可以逃跑$project。此外,在查询中,{$project} 应该用单引号括起来。
  • 你试过什么?您只需将$project 更改为占位符(?)然后调用$conn->prepare($galNumb),绑定参数然后执行 - 参见php.net/manual/en/mysqli.prepare.php
  • 除了对其他代码示例进行逆向工程外,我没有尝试任何其他方法。我对此感到困惑,这就是我在这里发布此内容的原因。

标签: php mysqli prepared-statement


【解决方案1】:

这很简单。这将准备一个 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

【讨论】:

  • Michael,我确实看过那个链接,但我不得不说,PHP 手册不是用新手友好的语言编写的。它总是让我感到困惑而不是帮助。
  • 您的问题解决了吗?我注意到您之前在另一篇文章中问过同样的问题。
  • 迈克尔,呃......上次我在一个线程中问了两个问题,我得到了一个谈话。因此,由于我之前的帖子没有解决我的问题,我决定重新措辞并再试一次。很难知道如何就你知之甚少的事情提出问题。不,这还没有回答。
  • 我已经更新了回复。这是你要找的吗?
  • Michael...我认为我们正朝着正确的方向前进。但是,我发现了这个错误:致命错误:在第 23 行的 /path/file.php 中的非对象上调用成员函数 prepare()
【解决方案2】:
$stmt = $dbConnection->prepare('SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project = ?');
$stmt->bind_param('s', $project);

$stmt->execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多