gpt4 book ai didi

php - PDO 和 Microsoft SQL : Must declare the table variable "@P1"

转载 作者:行者123 更新时间:2023-12-03 07:49:35 25 4
gpt4 key购买 nike

我正在尝试使用 PDO 中的绑定(bind)来从 Microsoft SQL 数据库中选择一些条目。我正在使用的代码看起来与我在文档中找到的代码类似。但是,当我运行它时,我收到以下警告:

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 1087 [Microsoft][SQL Native Client][SQL Server]Must declare the table variable "@P1". (SQLExecute[1087] at ext\pdo_odbc\odbc_stmt.c:254) in (long file path) on line 40

相关代码如下:

$table = "[User Site]";
$user = "demo";
$sql = "SELECT * FROM ? WHERE user='?'";
$sth = $db->prepare($sql);
$sth->bindValue(1, $table, PDO::PARAM_STR);
$sth->bindValue(2, $user, PDO::PARAM_STR);
$sth->execute(); // <-- line 40
$data = $sth->fetch(PDO::FETCH_ASSOC);

这可能是相关的。当我尝试使用命名参数标记(:table、:user)而不是问号时,我得到:

Warning: PDOStatement::bindValue() [pdostatement.bindvalue]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in (long file path) on line 39

为什么它不喜欢我准备好的陈述?

最佳答案

您无法将参数绑定(bind)到 SQL 中的表名。对于任何语言、任何数据库都是如此。

您必须在 prepare() 之前将表名称插入到查询字符串中。

此外,您不应将参数占位符放在引号内,即使它是字符串或日期值。引号内的参数占位符被解释为文字字符串。否则你怎么会输入字面上的问号?

这是我的写法:

$table = "[User Site]";
$user = "demo";
$sql = "SELECT * FROM $table WHERE user=?";
$sth = $db->prepare($sql);
$sth->execute(array($user));
$data = $sth->fetch(PDO::FETCH_ASSOC);

我不介意使用 bindParam()bindValue()。通常,将数组参数中的参数值传递给 execute() 会更容易。

关于php - PDO 和 Microsoft SQL : Must declare the table variable "@P1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3320320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com