这很好用:
$stmt = $db->prepare('SELECT id, title, content FROM table_01 WHERE id = :id');
$stmt->execute(array(':id' => $_GET['id']));
$row = $stmt->fetch();
但这会出错:
$table = "table_01";
$stmt = $db->prepare('SELECT id, title, content FROM'.$table.'WHERE id = :id');
答案 0 :(得分:7)
在表名前后添加空格:
$table = "table_01";
$stmt = $db->prepare('SELECT id, title, content FROM '.$table.' WHERE id = :id');
答案 1 :(得分:3)
在表名变量
之前和之后添加空格$table = "table_01";
$stmt = $db->prepare('SELECT id, title, content FROM '.$table.' WHERE id = :id');
答案 2 :(得分:2)
您可以通过两种方式实现: -
$table = "table_01";
$stmt = $db->prepare('SELECT id, title, content FROM '.$table.' WHERE id = :id'); (adding space before and after table in your code)
OR
$table = "table_01";
$stmt = $db->prepare("SELECT id, title, content FROM $table WHERE id = :id"); (adding space before and after table and use double quotes in your code)
答案 3 :(得分:1)
我会有一个稍微不同意见的立场...... DON' T.如果该表名来自您自己的代码以外的任何地方,那么您可以自己打开SQL注入。此外,如果您的代码被您以外的任何开发人员使用,那么您的应用程序将面临维护和安全问题。
如果您不使用ORM,例如Doctorine,或者至少实现存储库模式,您明确控制执行CRUD操作的查询而不是依赖传入的参数,则会冒更大的风险打开你的应用程序进行外部攻击。
答案 4 :(得分:0)
试试这个
$table_name = 'your_table_name';
$stmt = $db->prepare('SELECT id, title, content FROM '.$table_name.' WHERE id = :id');
$stmt->execute(array(':id' => $_GET['id']));
$row = $stmt->fetch();
答案 5 :(得分:0)
您没有包含空格。试试这个。
$stmt = $db->prepare('SELECT id, title, content FROM '.$table.' WHERE id = :id');