php - 数组,从 MySQLi 到 PDO

标签 php mysql arrays pdo mysqli

几年前,SO 用户帮助我构建了以下代码来在组中分配“伙伴”(例如循环 [A->B->C->D->A->B->。 ..]):

$q = "SELECT user_id FROM users WHERE group_id='$gi' ORDER BY RAND()";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));

    while ($row = mysqli_fetch_array($r)) {
        $users[] = $row[0];
    }

    $current = end($users);
    $partners = array();
    foreach ($users as $user) {
        $partners[$user] = $current;
        $current = $user;
        $q="UPDATE users SET partner='{$partners[$user]}' WHERE user_id='{$user}'";
        mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
    }

然而,现在我正在用 PDO 重写我的大部分代码,而数组让我很苦恼。这是迄今为止我重写此内容的最佳尝试:

$query = "SELECT id FROM users WHERE gid=:gid ORDER BY RAND()";
$query_params = array( ':gid' => $_SESSION['user']['gid'] );
try {
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
} 
catch(PDOException $ex) {   
    die("Failed to run query: " . $ex->getMessage());
}
while ($row = $stmt->fetchAll(PDO::FETCH_COLUMN)) {
$users[] = $row[0];
}
$current = end($users);
$partners = array();
foreach ($users as $user) {
    $partners[$user] = $current;
    $current = $user;
    $query = "UPDATE users SET partner=:partner WHERE id=:id";
    $query_params = array(
        ':partner' => '{$partners[$user]}',
        ':id' => '{$user}'
    );

    try {
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
    }
    catch(PDOException $ex) {
        die("Failed to run query: " . $ex->getMessage());
    }
}

我所有的阅读和搜索都没有给出为什么我修改后的代码不再有效的答案。 现在发生的情况是,一个用户自己被分配为合作伙伴,而不是循环分配合作伙伴。

据我所知,我的 fetchAll 语句不正确,但是怎么办呢?我一生都无法弄清楚。

(如果您建议一种更有效的方法来完成这一切,我不会感到不安。)

最佳答案

   ':id' => '{$user}'

是错误的。您正在尝试将文字 {$u 等插入查询中。应该只是

  ':id' => $user

对于合作伙伴来说也是如此。

记住...PHP 不会在单引号字符串中插入变量。

关于php - 数组,从 MySQLi 到 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15032920/

相关文章:

javascript - 使用 Javascript 将 FORM_1 (page1.html) 的数据传递给 FORM_2 (page.html)

php - 有没有办法在Windows上通过PHP利用Oracle钱包?

php - SQL_CALC_FOUND_ROWS 和 SELECT FOUND_ROWS() on UNION query (not UNION ALL) with LIMIT

java - 如何为 Java JDBC EntityManagerFactory 类中的实体设置 ID?

arrays - 如何将元组添加到 Swift 数组?

PHP MySql 存储数据24小时

html - 以 MYSQL 数据类型存储文章

mysql - 使用 future 日期时,MariaDB UNIX_TIMESTAMP() 返回 NULL

java - Android 内存不足异常存储大量字节

Python 将行转换为数组