0

PHP コードで、データベース内の行の値を取得しようとしています。クエリを安全にしたいので、プリペアド ステートメントで mysqli を使用しました。ただし、行をフェッチして結果をエコーし​​ようとした後、エコーしたものに対して null 値が返されます。その理由は何ですか?

以下は、結果をフェッチしてエコーするコードの一部です。

// 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>
4

2 に答える 2

1

フェッチの結果を新しい変数に代入する必要がbinding resultないので、以下のようにしてみてください

$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

于 2012-11-13T16:17:55.190 に答える
0

問題は、DB クエリの結果がオブジェクトであることだと思います。

これを試して、

$rows[0]->name instead of 

$rows['name']

行が複数ある場合。を使用して結果の数を取得します

$count = count($row);

次に、for ループに進みます

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

}

于 2012-11-13T16:16:01.757 に答える