如何使用变量而不是表名?

时间:2016-06-16 05:45:13

标签: php

这很好用:

$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');

6 个答案:

答案 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');