【问题标题】:mysqli query returns row with no datamysqli 查询返回没有数据的行
【发布时间】:2012-11-02 02:06:00
【问题描述】:

在 php 代码中,我试图检索数据库中一行的值。我希望我的查询是安全的,所以我使用 mysqli 和准备好的语句。但是,在获取行并尝试回显结果后,无论我回显什么,我都会得到空值。可能是什么原因?

以下是我的代码中获取并回显结果的部分。

// get value of id that sent from address bar 
$id=$_GET['id'];

////$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$sql = $mysqli -> prepare("SELECT topic, detail, name, email, datetime FROM $tbl_name WHERE id=?");
$sql -> bind_param ("s", $id);
$sql -> execute();    

/* store result */
//  $sql->store_result();

// echo  "NUMBER IS : " . "$sql->num_rows";


$sql -> bind_result($topic, $detail, $name, $email, $datetime);
$rows = $sql -> fetch();




////$result=mysql_query($sql);

////$rows=mysql_fetch_array($result);
$sql -> close();
?>
<table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td width="30%" align="left" bgcolor="#FFFFFF"><IMG name="pictureposition1" border="0" alt="" SRC="images/concordia_logo.jpg" ><br></td>
<td width="30%" colspan="5" align="center" bgcolor="#FFFFFF"><h1><font COLOR=#800517>PHP Forum</font></h1> </td>
<td width="30%" colspan="5" align="right" bgcolor="#FFFFFF"><h3><font COLOR=#800517>CMPE and SOFE 495 Computer Security</font></h3> </td>
</tr>
<tr>
<td><font COLOR="#FFFFFF">.</font></td>
</tr>
</table>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bordercolor="1" bgcolor="#FFFFFF">
<tr>
<td bgcolor="#F8F7F1"><strong><?php echo $rows['topic']; ?></strong></td>
</tr>

<tr>
<td bgcolor="#F8F7F1"><?php echo $rows['detail']; ?></td>
</tr>

<tr>
<td bgcolor="#F8F7F1"><strong>By :</strong> <?php echo $rows['name']; ?> <strong>Email : </strong><?php echo $rows['email'];?></td>
</tr>

<tr>
<td bgcolor="#F8F7F1"><strong>Date/time : </strong><?php echo $rows['datetime']; ?></td>
</tr>
</table></td>
</tr>
</table>
<BR>

【问题讨论】:

  • 你在哪里定义$tbl_name?当您回显 SQL 查询时,它看起来像您期望的那样吗?当你运行它时,它是否返回一行?
  • 我之前在代码中定义了$tbl_name。回声返回空值。但是,我确保在 execute() 之后得到一行
  • var_dump($rows) 怎么样?
  • 你的 $id 不应该是整数而不是 "s" 字符串吗?

标签: php mysql phpmyadmin mysqli


【解决方案1】:

我认为问题在于数据库查询的结果是一个对象。

试试这个,

$rows[0]->name instead of 

$rows['name']

如果有多行。使用

获取结果的计数
$count = count($row);

然后进行for循环

for($i = 0;$i < $count; $i++){
$rows[$i]->name;

}

【讨论】:

    【解决方案2】:

    您是binding result,因此无需将 fetch 的结果分配给新变量,请尝试以下操作

    $sql -> bind_result($topic, $detail, $name, $email, $datetime);
    $sql -> fetch();
    echo $topic."<br>";
    echo $detail."<br>";
    

    查看 PHP 手册了解更多详情:http://www.php.net/manual/en/mysqli.prepare.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-23
      • 2016-05-17
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      相关资源
      最近更新 更多