【问题标题】:PDO - get two select values into an arrayPDO - 将两个选择值放入数组中
【发布时间】:2013-05-26 08:59:46
【问题描述】:

我有这个 PDO:

$id = 1;
$title = 'resourceName';
$url = 'resourceURL';
$result = array($title => $url);

include('../dbconnect.php');

$pdo = new PDO("mysql:host=$db_host;dbname=$db_name;", $db_user, $db_password);
$stmt = $pdo->prepare("SELECT resourceName, resourceURL FROM Resources WHERE categoryID = :id");
$stmt->bindParam(':id', $id);
$stmt->execute(array_values($result));
$row = $stmt->fetchAll();
print_r($row);

我刚刚收到此错误: 警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 参数号无效:参数未定义

如何让 PDO 结果成为一个以 resourceName 为键、resourceURL 为值的数组?

【问题讨论】:

标签: mysql arrays pdo


【解决方案1】:

您正在将不需要的参数绑定到查询。

$stmt->bindParam(':id', $id);
$stmt->execute(array_values($result)); //On this line. These parameters are 
                                         not needed

让我解释一下

$stmt->bindParam(':id', $id);

将 $id 的值绑定到 SQL 参数 :id 并再次绑定

$stmt->execute(array_values($result));

您正在绑定另一个没有任何索引的参数。

因此您的查询需要 1 个参数,而您要发送两个参数

解决方案:使用其中一种

要么

$stmt->bindParam(':id', $id);

或者,直接这样

$stmt->execute(array(":id" => $id));

之后,从行中获取列并将它们转换为所需格式的新数组

$row = $stmt->fetchAll();
//Now assuming only one was returned from the database this might work
$new = array($row[0] -> resourceName => $row[0] -> resourceURL);

【讨论】:

  • 好吧,这是有道理的。但是如何将 resourceName 和 resourceURL 的值放入一个数组中,其中前者是后者的键?打印出来的结果只是一堆多维数组
  • 谢谢!如果返回多行怎么办?我问是因为我需要将所有这些值粘贴到带有链接的无序列表中
  • @NojoRu,检查正在打印的结果并使用 foreach() 循环构造您的数组类型。
  • 为什么新数组中的resourceName和resourceURL不在引号内?
【解决方案2】:

你正在混合参数绑定

$id = 1;
$title = 'resourceName';
$url = 'resourceURL';
$result = array($title => $url);

include('../dbconnect.php');

$pdo = new PDO("mysql:host=$db_host;dbname=$db_name;", $db_user, $db_password);
$stmt = $pdo->prepare("SELECT resourceName, resourceURL FROM Resources WHERE categoryID = :id");
$stmt->bindParam(':id', $id);
$stmt->execute(); //the array you put in execute will be used as parameter
$row = $stmt->fetchAll();
print_r($row);

http://www.php.net/manual/en/pdostatement.execute.php

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2019-05-04
    • 2017-07-04
    • 2020-03-02
    相关资源
    最近更新 更多