PDO中附加到字符串的问号

时间:2019-03-15 10:52:00

标签: php sql pdo eloquent prepared-statement

我有一个看起来像这样的字符串:

use Illuminate\Database\Capsule\Manager as DB;

DB::select("SELECT id FROM table_?", [$var]);

因此查询看起来像SELECT id FROM table_users

问题是我收到语法错误:

  

您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获取在'?'附近使用的正确语法。在第1行

为什么不雄辩(或通常说PDO)替换附加在字符串上的?

1 个答案:

答案 0 :(得分:3)

PDO不只是取代吗?与其他字符串。它执行查询的语义解析,构造一个执行计划,然后使用您绑定到该查询的值执行该计划。没有表名,您将无法建立执行计划。因此,您不能像这样绑定表名中的任意字符串。您必须改为使用字符串串联:

DB::select("SELECT id FROM table_" . "users");

或者,因为您已经拥有所有字符串作为文字,所以您自己动手做吧:

DB::select("SELECT id FROM table_users");