PHP:Mysqli准备声明"选择*"

时间:2015-03-27 20:14:50

标签: php mysqli prepared-statement

这就是我目前从数据库中获取的方式:

if ($stmt = $mysqli->prepare ( "SELECT fname,lname from $table_name 
where cno >=? LIMIT 50" ))
    {
        $stmt->bind_param ( "i", $cno); 
        $stmt->execute ();
        $stmt->bind_result ($fname,$lname); 
        $arrayUsers = array();

        while ($stmt->fetch())
        {
            if (isset ($fname))
            {
                $arrayUsers[] = array(
                        "fname" => $fname,
                        "lname" => $lname);

}
}
$stmt->close ();
        }
        $mysqli->close ();

它很有效。 但是,如果我将我的选择更改为SELECT * from ...我的绑定失败。 这是否意味着如果我有大量字段,我仍然需要指定每个字段或是否有办法使用select *

----更新---

if (empty($arrayUsers))
    {
        return 0;
    }
    else
    {
        return $array;
    }

2 个答案:

答案 0 :(得分:3)

如果您需要选择所有列:

SELECT * FROM `table`

您将使用PHP get_result()而不是bind_result()

当您指定要检索的每个列时,

bind_result()会更好,get_result()将允许您使用表格中更通用的数据返回。

答案 1 :(得分:2)

SELECT *永远不是一个好主意。

明确表达更好。

如果你只有2列,那就可以了。

bind_result如何处理数字变量需要匹配列。

除此之外,它需要具有相同的顺序

修改 pdo中的示例:

if ($stmt = $pdo->prepare ("SELECT * from `$table_name` where cno >=:cno LIMIT 50" )){
    $stmt->execute([':cno'=>$cno]);
    $arrayUsers = $stmt->fetchAll();
    $stmt->close();
}
$pdo->close();