将结果绑定到php数组中

时间:2009-03-04 13:12:17

标签: php mysql mysqli prepared-statement

我正在尝试使用以下代码从查询中获取结果并将其显示在tes.php页面中。

db.inc.php

<?php
function db_connect()
{
    $handle=new mysqli('localhost','rekandoa','rekandoa','rekandoa');
 if (!$handle)
{
       return false;
   }
return $handle;
}

function get_member()
{
    $handle=db_connect();
$sql="Select email,nama,alamat,kota,propinsi from users where email=?";
    $stmt=$handle->prepare($sql);
  $mail='yonghan79@gmail.com';
    $stmt->bind_param("s",$mail); 
 $stmt->execute();
  $stmt->bind_result($email,$nama,$alamat,$kota,$propinsi);
  $result=$stmt->fetch();
    return $result;
}
?>

tes.php

<?php
error_reporting(E_ALL & ~E_NOTICE);
include('db.inc.php');
$w=get_member();
echo $w['member_id'];
echo '<br>';
echo $w['email'];
echo '<br>';
echo $w['status'];
echo '<br>';
?>

我没有收到任何错误消息,但结果未显示,只是一个空白页。

我做错了什么?

2 个答案:

答案 0 :(得分:5)

$stmt->bind_result($email,$nama,$alamat,$kota,$propinsi);

上述行将确保结果存储在您提供的变量中。 fetch() function返回TRUEFALSE - 查询是否成功,而不是实际结果。你需要像

这样的东西
return array(
    'email'    => $email,
    'nama'     => $nama,
    'alamat'   => $alamat,
    'kota'     => $kota,
    'propinsi' => $propinsi);

答案 1 :(得分:1)

fetch()本身不返回数组,它返回一个布尔值,表示它有一行。 因此你可以这样做:

while($stmt->fetch()) {
     //$email,$nama,$alamat,$kota,$propinsi are now filled
}

动态地将值绑定到数组中(与soulmerge的解决方案不同)需要更多的工艺。我创建了一个Database class来做到这一点。它充当包装器的周围mysqli预处理语句,将结果作为对象返回,其中select列充当对象的属性。如果你在类中取出强制转换为对象,它将根据你的需要返回数组。