<?php
$user = 'root';
$pass = 'password';
$dbh = new PDO('mysql:host=127.0.0.1;dbname=dbname', $user, $pass);
$num = ($_GET['page']-1)*2;
echo $num;
$strSQL = "select * from username limit '$num',2";
$result = $dbh->query($strSQL);
foreach ($result as $row) {
echo $row['number'] . "<br>" . $row['username'] . "<br>" . $row['password'];
}
?>报错
Warning: Invalid argument supplied for foreach() in /home/study/html/zjy/admin.php on line 9
网上查说是foreach里不是数组时会报这个错
这里result检查过是数组
然而依旧报错求各位大大解惑,谢谢

解决方案 »

  1.   

    嗯,找到问题了
    $strSQL = "select * from username limit $num,2";
    这里$num没有单引号这里追问下 什么时候要加引号啊,只知道单引号双引号区别,但具体什么时候用都靠猜
    谢谢
      

  2.   

    为什么要猜呢?你要明白你自己写的是什么?sql语句,你查一下官方文档。
    SELECT*FROMtable  LIMIT [offset,] rows | rows OFFSET offset
    是这样子写的。
      

  3.   

    limit 后的两个参数应该是整数,你加引号为字符串了自然就不对了。
      

  4.   

    $result为空,但你执行foreach就报错了。$strSQL = "select * from username limit $num,2"; 数字不需要加引号,加了就是字符串了。
      

  5.   

    sql语句 limit后面跟着的两个是整数,表示从第几条开始往后多少条。
    表示数字的就不用单引号,比如年龄大于18岁,age>=18;
    表示字符串就必须用单引号,比如名字为张三,name='张三'。
      

  6.   


    if($result){ // 加个判断,为空则不执行foreach
        foreach ($result as $row) {
            echo $row['number'] . "<br>" . $row['username'] . "<br>" . $row['password'];
        }
    }
      

  7.   

    foreach 里的数组 你必须保证100%是数组 因为一旦不是数组就要报错  所以建议参考楼上的 当不能保证100%是数组的时候 加一层判断