【问题标题】:Challenges with mysql_fetch_array()mysql_fetch_array() 的挑战
【发布时间】:2013-12-21 16:42:36
【问题描述】:

我遇到了这样一种情况,将 mysql_query() 结果输入 mysql_fetch_array() 函数被解释为布尔值而不是结果。

下面的代码使用Using an SQL result in a foreach loop 作为代码示例来执行foreach 循环。代码可能仍然存在多个问题,因为我当前的问题发生在 foreach 循环之前。

$results=mysql_query("SELECT * FROM order_details WHERE orderid = $orderid");

    print "SELECT * FROM order_details WHERE orderid = $orderid";

    $productid;
    $quantity;
    $price;

    $resultset = array();
while ($row = mysql_fetch_arraY($results)) {
$resultset[] = $row;
}

    foreach ($resultset as $result)
    {

    $productid = $result['productid'];
    $quantity = $result['quantity'];
    $price = $result['price'];

    print "<br />$productid, $quantity, $price";
    };

【问题讨论】:

  • 它不是“解释为布尔值”——它只是 is 布尔值false,因为您的查询有错误。使用mysql_error() 找出它是什么。
  • 通过使用外部变量构建 SQL 语句,您很容易受到 SQL 注入攻击。 此外,任何带有单引号的输入数据,例如 " O'Malley”,会炸毁你的 SQL 查询。请了解如何使用参数化查询(最好使用 PDO 模块)来保护您的 Web 应用程序。 bobby-tables.com/php 有一些示例可以帮助您入门,this question 有很多详细示例。
  • 谢谢,我知道这并不完美。但这只是 PHP 类的一些快速代码。我肯定会在现实世界的环境中清理我的琴弦。 :)

标签: php mysql arrays foreach


【解决方案1】:
for($i=0;$i<$max;$i++) {
        $pid=$_SESSION['cart'][$i]['productid'];
        $q=$_SESSION['cart'][$i]['qty'];
        $price=get_price($pid);

        $pname;

        $row = mysql_fetch_assoc(mysql_query("SELECT name\n"
        . "FROM `products` \n"
        . "WHERE SERIAL =$pid\n"
        . "LIMIT 1"));
        $pname = $row['name'];

        print "<br  />Product Name: $pname, Quantity: $q, Price: $price";
    }

【讨论】:

    【解决方案2】:

    如果一切正常,将$orderid 更改为'$orderid'。 一个重要的注意事项,尝试使用 mysqliPDO 而不是 mysql。

    【讨论】:

      最近更新 更多