Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 动态更改PDO语句中的列名_Php_Mysql_Pdo_Prepared Statement - Fatal编程技术网

Php 动态更改PDO语句中的列名

Php 动态更改PDO语句中的列名,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,是否可以在准备好的MySQL语句中传递列名作为参数?以以下为例: UPDATE Images SET :placement = :imageURL WHERE ID = :titleID; PDO在每个参数周围添加”,因此上面的中间行变为: SET 'Homepage' = '1.jpg' 这是MySQL不喜欢的。有没有办法在PDO语句中包含字段名的参数并让它们被接受 否则,我想我将不得不编写几个不同的PDO语句,具体取决于所选内容(?)。您需要执行以下操作: $column = 'some

是否可以在准备好的MySQL语句中传递列名作为参数?以以下为例:

UPDATE Images
SET :placement = :imageURL
WHERE ID = :titleID;
PDO在每个参数周围添加
,因此上面的中间行变为:

SET 'Homepage' = '1.jpg'
这是MySQL不喜欢的。有没有办法在PDO语句中包含字段名的参数并让它们被接受


否则,我想我将不得不编写几个不同的PDO语句,具体取决于所选内容(?)。

您需要执行以下操作:

$column = 'someColumn';

$stmt = $db->prepare("UPDATE tableName SET {$column} = :columnValue WHERE ID = :recordId");
参数化占位符仅用于值


我建议您阅读在您的问题上发布的@YourCommonSense评论。

在这种情况下,我使用不同类型的替换参数,如下所示:

$unitLabel = 'store_number';
$sql = 'select * from users where [unitLabel] = :unit and level = :level;';
$sql = str_replace('[unitLabel]', $unitLabel, $sql);
$params = array(
  ':unit' => 300,
  ':level' => 'admin',
);
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
准备好的SQL查询最终被处理(或多或少)为:


这对我的情况很有用。我希望这有帮助。:)

@YourCommonSense-这容易受到SQL注入的攻击吗?在我的情况下不会,因为涉及的变量不使用来自受污染源的值。使用此方法时必须小心,以确保来自任何源的任何用户输入在使用前都经过验证和消毒,但这对于熟练的程序员来说应该是本能的。我实现此方法的方式是使用
“SELECT*from table WHERE{$var}=?”
,而不是使用stru替换。我使用了一个可能的参数数组,并检查那里是否存在
$var
,如果不存在,它就会终止页面。你认为这安全吗?
SELECT * FROM USERS WHERE store_number = 300 AND level = 'admin';