如何从面向对象的Mysqli准备语句中分配结果

时间:2015-03-06 17:39:41

标签: php mysqli prepared-statement

我正在尝试从mysqli预处理语句查询中分配结果,但是我无法将结果分配给我的变量。我尝试了几种方法,并确认我的查询正在运行并撤回数据。

以下是我尝试分配结果的方法:

if ( $stmt1 = $mysqli->prepare("SELECT `email`, a.`$colname`
                                FROM `li_appointments`.`li_appointments` AS a
                                LEFT JOIN `lidb_users`.`login_users` AS b ON a.`created_by` = b.`username`
                                WHERE a.`app_id` = ?
                                LIMIT 1;")) {
    $stmt1->bind_param("s", $id);
    $return1 = $stmt1->execute();
    $stmt1->bind_result($z, $name);
        while($stmt1->fetch()) {
               $to_email = $email;
               $oldvalue = $$colnam;
                        }   
    $stmt1->close();
    }

为什么没有将这些变量分配给变量?

2 个答案:

答案 0 :(得分:4)

这不会奏效,因为您正试图从$ email和$$ colnam获取价值

bind_result将所有需要由查询中的数据填充的变量作为参数。所以在你的声明中,你有$ z和$ name,但是你不打电话给他们。

你必须为$ to_email分配$ z的值并分配给$ oldvalue,$ name这样的值

while ($stmt1->fetch()) {
    $to_email = $z;
    $oldvalue = $name;
}

请注意,$$ colnam是PHP中var的动态调用。 如果您有以下代码:

$message = 'hi!';
$burger = 'message';
echo $$burger;

它将输出' hi!'因为它会读取$ burger的值,这是' message'并动态调用$ message

答案 1 :(得分:3)

您已将这两列绑定到$z$name,但之后您尝试通过$email$$colnam访问它们。

使用您绑定的变量:

while($stmt1->fetch()) {
    $to_email = $z;
    $oldvalue = $name;
}