prepared语句查询失败

nxowjjhe  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(355)

这个问题在这里已经有答案了

我可以参数化准备语句中的表名吗(2个答案)
两年前关门了。
所以我遇到了一些困难,我真的不知道为什么。当我运行原始代码时,会收到一条错误消息,说我的查询不可接受。
所以我的代码如下。

$parts = array(
    "engine",
    "reactor"
);

$count = count($parts);

for($x = 0; $x < $count; $x++) {

    $table = 'ship_'.$parts[$x];

    $sql = "SELECT * FROM ? WHERE UserId = ?";

    $stmt1 = mysqli_prepare($con, $sql);

    mysqli_stmt_bind_param($stmt1,'si',$table, $n_userid)

.....

所以这会引起一个性爱 Fatal error: Wrong SQL: SELECT * FROM ? WHERE UserId = ? Error: 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 '? WHERE UserId = ?' 但是,当我做以下操作时,它运行良好。

for($x = 0; $x < $count; $x++) {

    $table = 'ship_'.$parts[$x];

    $sql = "SELECT * FROM ". $table ." WHERE UserId = ?";

    $stmt1 = mysqli_prepare($con, $sql);

    mysqli_stmt_bind_param($stmt1,'i', $n_userid);  

....

那么这是我这边的错误还是我不能用一个参数作为表呢?。我更希望将该表作为一个准备好的语句参数加载,但是如果无法绕过它,我将不得不使用我得到的。

cld4siwp

cld4siwp1#

不能对表名使用绑定参数。
只能通过绑定占位符提供值。
不能通过绑定占位符提供标识符(表名、列名、函数名等)。

相关问题