php中的非法字符串偏移量

时间:2015-11-10 21:11:01

标签: php mysql foreach

当我尝试将关联数组中的值存储到表中时,我在php中收到非法字符串偏移警告。

当我打印关联数组时,我得到了这个:

数组([productName] => iphone [productDesc] =>来自apple的产品[price] => 5 [image] => test / Group / pic.png)

   $db1 = new mysqli('localhost',$user,$pass,$db) or die (" Connection failed  ");
   $query="Select productName,productDesc,price,image from product where productID=1";
   $query_first=mysqli_query($db1,$query) or die("Query not retrieved");

   $query_second=mysqli_fetch_assoc($query_first);
   //print_r($query_second);
   $rows=mysqli_num_rows($query_first);
   echo '<table border="1">';
    echo '<tr>

             <td> Product Name</td>
             <td> Product Description</td>
             <td> Price</td>
             <td> Image </td>
        </tr> ';

    foreach($query_second as $r)
    {


        echo '<tr><td>'.$r['productName'];
        echo '</td><td>'.$r['productDesc'];
        echo '</td><td>'.$r['price'];
        echo '</td><td>'.$r['image'];
        echo '</td></tr>';
    }//end foreach
   echo"</table>";

2 个答案:

答案 0 :(得分:1)

http://php.net/manual/en/mysqli-result.fetch-assoc.php

  

mysqli_result :: fetch_assoc - mysqli_fetch_assoc - 获取结果行   作为关联数组

mysqli_mysqli_fetch_assoc从数据库返回一个行。 正如您在print_r()的结果中看到的那样。

数组包含:

Array ( [productName] => iphone [productDesc] => A product from apple [price] => 5 [image] => test/Group/pic.png )

因此,当你在第一次迭代中遍历数组时,$ r将包含一个值为#34的字符串; iphone&#34;,第二个循环&#34;来自apple&#34;的产品等等。

在您的代码中,您基本上是说#34;来自STRING iphone给我的位置&#39; productName&#39; &#34;,你可以猜到&#34; productName&#34;不是字符串中的有效字符位置。

所以你需要迭代表中的每一行。

<?php
$db1 = new mysqli('localhost',$user,$pass,$db) or die (" Connection failed  ");
$query="Select productName,productDesc,price,image from product where productID=1";
$query_first=mysqli_query($db1,$query) or die("Query not retrieved");

//print_r($query_second);

echo '<table border="1">';
echo '<tr>

     <td> Product Name</td>
     <td> Product Description</td>
     <td> Price</td>
     <td> Image </td>
</tr> ';


while($r=mysqli_fetch_assoc($query_first)) {

    echo '<tr><td>'.$r['productName'];
    echo '</td><td>'.$r['productDesc'];
    echo '</td><td>'.$r['price'];
    echo '</td><td>'.$r['image'];
    echo '</td></tr>';
}//end foreach
echo"</table>";

?>

如果你只想要一行,那么你就不需要交流

<?php
$db1 = new mysqli('localhost',$user,$pass,$db) or die (" Connection failed  ");
$query="Select productName,productDesc,price,image from product where productID=1";
$query_first=mysqli_query($db1,$query) or die("Query not retrieved");

//print_r($query_second);

echo '<table border="1">';
echo '<tr>

     <td> Product Name</td>
     <td> Product Description</td>
     <td> Price</td>
     <td> Image </td>
</tr> ';


$r=mysqli_fetch_assoc($query_first);

echo '<tr><td>'.$r['productName'];
echo '</td><td>'.$r['productDesc'];
echo '</td><td>'.$r['price'];
echo '</td><td>'.$r['image'];
echo '</td></tr>';

echo"</table>";

?>

答案 1 :(得分:0)

mysqli_fetch_assoc返回一行,因此您不需要使用以下内容循环:

foreach($query_second as $r)

http://php.net/manual/en/mysqli-result.fetch-assoc.php