PHP PDO - 将数组用于 SELECT SQL 语句

标签 php mysql arrays pdo

我遇到了一点问题。基本上我想做的是以下内容;

  • 我正在使用 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)。尽管填充了正确的数字和值,但它似乎不想接受它。

有人知道如何做到这一点,或者我上面做错了什么吗?

最佳答案

调试代码后,我发现两个问题:

  1. $queryString .= 'WHERE column4 = ?' 部分后缺少分号。
  2. 如果我转储您的结果查询,它会类似于

更新表 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/

相关文章:

mysql - SQL : select record from table 1 which are not in table 2

队列数据结构的Java数组表示

ruby-on-rails - rails 在模型中验证该值在数组内

php - 将上传的文件发布到另一个 PHP 页面?

php - 使用字符串调用 php 方法

c# - 您的 SQL 语法有错误,适用于 .net 的 mysql 连接器

php - 如何在 Laravel 5.4 中存储数组 cookie?

php - Varnish/NGINX 基于时间的限制

php - 为什么我们需要在bindParam()中指定参数类型?

php - 使用 PDO 将数组的日期格式更改为 MySQL 格式