准备好的声明中的参数包含连字符( - )?

时间:2013-11-26 09:13:44

标签: php mysqli prepared-statement execute hyphen

我正在尝试将所有标准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中使用set变量尝试了它们,并且它们在那里工作正常。

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

我得到的错误是:

  

在非对象

上调用成员函数bind_param()

1 个答案:

答案 0 :(得分:0)

  1. 您的问题与连字符或准备好的陈述无关。
  2. 真正的问题是您的数据库设计。您必须将所有项目存储在同一个表中,而不是为每个项目设置单独的表。
  3. 请明智地命名您的变量。无论$db->prepare是什么$get_progress_done返回的内容都不是$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; - 它只是一个mysqli声明。
  4. 所以,这段代码会做

    {{1}}

    但是,在我的生活中,我永远不会理解编写7行代码的PHP用户,其中只有一行是足够的。