Mysqli - 我可以使用'? =?'在准备声明中

时间:2018-01-11 14:39:41

标签: php mysqli

所以即时使用MVC进行数据库连接等。

我的问题非常简单: 有没有办法让我使用像?=?。

之类的东西来制作动态

这是一个似乎不起作用的例子:

$statement = $this->dbh->prepare("SELECT fieldname FROM tablename WHERE ? = ?");
$statement->bind_param('ss', $stringvariable, $fieldvalue);
$statement->execute();

该示例位于一个函数中,该函数接收包含字段名的$ stringvariable。

感谢您提供有关如何制作此类作品的任何建议!

EDIT!

它使用了AlexK发布的链接。

$statement = $this->dbh->prepare("SELECT fieldname FROM tablename WHERE ".$stringvariable." = ?"); 
$statement->bind_param('s', $fieldvalue); 

2 个答案:

答案 0 :(得分:1)

不,这是不可能的。准备好的语句仅对变量有用,对场名不有用。但是,您可以使用以下查询首先检查表名:

SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = ?;

如果结果为1,您可以安全地在查询中添加表名作为PHP变量来检查表名:

SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?;

如果这也导致1,您可以在查询中安全地添加表名和列名。

此方法通过首先控制输入来防止SQL注入。

答案 1 :(得分:0)

我更喜欢这样做:

test = pd.Series(test)