Php 尝试学习mysqli编写的语句;我做错了什么?

Php 尝试学习mysqli编写的语句;我做错了什么?,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,这是我得到的错误 Failed to prepare statement: (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?.Pages WHERE slug='?'' at line 1 这是我的密码 require_once("../database/co

这是我得到的错误

Failed to prepare statement: (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?.Pages WHERE slug='?'' at line 1
这是我的密码

require_once("../database/config.php");

        $pageSlug = "home";

        $db = new mysqli(_DB_HOST, _DB_USER, _DB_PASSWORD, _DB_NAME);

        if ( $db->connect_errno ) {
            echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
            exit();
        }

        if ( !$selectQuery = $db->prepare("SELECT * FROM ?.Pages WHERE slug='?'") ) {
            echo "Failed to prepare statement: (" . $db->errno . ") " . $db->error;
            exit();
        }

        if ( !$selectQuery->bind_param("ss", _DB_NAME, $pageSlug) ) {
            echo "Binding parameters failed: (" . $selectQuery->errno . ") " . $selectQuery->error;
            exit();
        }

        if ( !$selectQuery->execute() ) {
            echo "Exexute failed: (" . $selectQuery->errno . ") " . $selectQuery->error;
            exit();
        }

        echo "<pre>I GOT HERE!</pre>";
        exit();
require_once(“../database/config.php”);
$pageslaug=“主页”;
$db=新的mysqli(\u db\u主机、\u db\u用户、\u db\u密码、\u db\u名称);
如果($db->connect\u errno){
echo“无法连接到MySQL:(“$db->connect\u errno.”“$db->connect\u error;
退出();
}
if(!$selectQuery=$db->prepare(“SELECT*FROM?.Pages,其中slug='?')){
echo“准备语句失败:(“$db->errno.”“$db->error;
退出();
}
if(!$selectQuery->bind_参数(“ss”,_DB_NAME,$pageSlug)){
echo“绑定参数失败:(“$selectQuery->errno.”“$selectQuery->error;
退出();
}
如果(!$selectQuery->execute()){
echo“Exexute失败:(“$selectQuery->errno.”“$selectQuery->error;
退出();
}
回声:“我到了!”;
退出();
。/database/config.php
只包含我上面引用的全局变量(“\u DB\u NAME”,等等)

我想我仍然只是把我的头缠在这些事情上,不知道我做错了什么


提前谢谢

准备好的语句不能使用参数来提供标识符(模式名、表名、列名等),因为在提供这些参数的值之前,它们会提交给DBMS以验证语法

这些标记仅在SQL语句中的某些位置是合法的。对于 例如,在INSERT语句的VALUES()列表中允许它们 (为行指定列值),或与列进行比较 在WHERE子句中指定比较值。但事实并非如此 允许在select中使用标识符(如表名或列名) 列出要由SELECT语句返回的列的名称,或 指定二元运算符的两个操作数,如=等于 签名后一项限制是必要的,因为这将是必要的 无法确定参数类型。这是不允许的 将标记与空值进行比较?也为空。一般来说,参数是 仅在数据操作语言(DML)语句中合法,而在 数据定义语言(DDL)语句

参数标记只能在数据值应该出现的地方使用, 不适用于SQL关键字、标识符等


尽管如此,您仍然可以使用动态SQL。例如:


UPD:

我注意到,您在字符串参数标记周围使用了单引号
。应该避免它们,因为dbms本身关心它们
slug=“?”
应该是
slug=?

仔细阅读:.

是否需要详细说明“动态SQL”?是否可能重复
$table = 'Example'; // Should be safe, avoid user input.
$sql   = "SELECT * FROM `{$table}` WHERE `id` = ?";
$stmt  = $db->prepare($sql);
// ...