我遇到了一点问题。基本上我想做的是以下内容;
- 我正在使用 PDO
- 我希望能够传递一个包含数据库中的列名(键)和我想要插入的信息(值)的数组。该数组可能包含 1 个或多个需要更新的字段。
- 我设计了一个如下所示的函数:
正在传递的示例数组:
$columnsToRetrieve = array('column1' => 'info',
'column2' => 'data',
'column3' => 'data');
以及一个示例函数(不包括数据库初始化部分)
function updateInfo ($columnsToRetrieve, $whereClauseValue) {
$counter = 1;
$queryString = 'UPDATE table SET ';
foreach ($columnsToRetrieve as $k => $V) {
$queryString .= $k . ' = ?';
}
$queryString .= 'WHERE column4 = ?'
$stmt = $dbc->dbConnection->prepare($queryString);
foreach ($columnsToRetrieve as $k => $v) {
$stmt->bindParam($counter, $v);
$counter++;
}
$stmt->bindParam($counter, $whereClauseValue);
$stmt->execute();
}
问题出在第二个 foreach 上,我尝试使用 bindParam($counter, $value)。尽管填充了正确的数字和值,但它似乎不想接受它。
有人知道如何做到这一点,或者我上面做错了什么吗?
最佳答案
调试代码后,我发现两个问题:
$queryString .= 'WHERE column4 = ?'
部分后缺少分号。- 如果我转储您的结果查询,它会类似于
更新表 SET 列 1 = ?列 2 = ?列 3 = ?WHERE 列 4 = ?
查看缺失的空格。那么如果修改这一行会怎么样:
$queryString .= $k . ' = ?';
到
$queryString .= $k . ' = ?,';
and(为了去掉最后一个逗号)
$queryString .= ' WHERE column4 = ?'
替换为
$queryString = substr($queryString,0,-1) . ' WHERE column4 = ?';
关于PHP PDO - 将数组用于 SELECT SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44524453/