0

我正在尝试将所有标准 MySQLi 查询重写为 MySQLi Prepared Statements。

不过,我注意到一个问题,每当我有一个包含连字符的变量时,execute() 就会失败。

我正在处理的变量 ($project_id) 如下所示:'AAD0012003-01'。

$get_progress_done = $db->prepare("SELECT COUNT(*) as rows FROM testvoorstage_checklists.?");
        $get_progress_done->bind_param("s", $project_id);
        $get_progress_done->execute();
        $get_progress_done->store_result();
        $get_progress_done->bind_result($rows);

        while($get_progress_done->fetch()) {            
            echo $rows;
        }

几天来我一直在寻找解决方案,但我仍然没有找到一种方法来“转义”变量中的连字符。

我知道查询确实有效,因为我已经在 PHPMyAdmin 中使用设置变量尝试过它们并且它们在那里工作正常。

我正在学习准备好的语句,我很想知道如何解决这个问题,因为我有很多包含特殊字符的变量。

我得到的错误是:

在非对象上调用成员函数 bind_param()

4

1 回答 1

0
  1. 您的问题与连字符或准备好的语句无关。
  2. 真正的问题是您的数据库设计。您必须将所有项目存储在同一个表中,而不是为每个项目创建一个单独的表。
  3. 请明智地命名您的变量。$db->prepare无论如何,返回的不是任何东西——$get_progress_done它只是一个 mysqli 语句。

所以,这段代码会做

$sql  = "SELECT COUNT(*) as rows FROM projects where project_id = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param("s", $project_id);
$stmt->execute();
$stmt->bind_result($rows);
$stmt->fetch();
echo $rows;

但是,我这辈子永远不会理解那些编写 7 行代码的 PHP 用户,而只有 1 行就足够了。

于 2013-11-26T09:20:34.337 回答