为托管程序中的 foreach php pdo 提供的参数无效

Posted

技术标签:

【中文标题】为托管程序中的 foreach php pdo 提供的参数无效【英文标题】:Invalid argument supplied for foreach php pdo in hostinger 【发布时间】:2017-04-16 19:06:57 【问题描述】:

我希望你能理解我的问题,我不太懂英语,但我会努力的。我在托管程序中有一个页面,当我生成显示行的代码时,给了我这个错误:

警告:为 foreach() 提供的参数无效

连接代码:

public static function conexion() 
    try 
        $con = new PDO('mysql:host=localhost;dbname=example', 'usuario', 'clave');
        return $con;
     catch (PDOException $e) 
        return false;
    

还有:

include 'functions.php';
$con = Functions::conexion();
$sql = 'SELECT * FROM Products p, Prices ps, ProductsPrices pc where p.IDP=pc.IDP AND ps.ID=pc.ID ORDER BY p.IDP ASC';
foreach ($con->query($sql) as $row) 
    echo '<tr>';
    echo '<td>'. $row['IDP'] . '</td>';
    echo '<td>'. $row['Name'] . '</td>';
    echo '<td>'. $row['Description'] . '</td>';
    echo '<td style="color: #333;">'. $row['Price'] . '</td>';
    echo '<td>' . '<a class="btn" href="update.php?id='.$row['IDP'].'">Edit</a>' . '</td>';
    echo '</tr>';

但是当我在 localhost 中加载时没有任何问题,显示行。

【问题讨论】:

这可能是你查询的一个小问题,你有没有在phpMyAdmin之类的里面测试过?? 查询没有问题,正如我在上一条评论中所说,我尝试显示行。 【参考方案1】:

那是因为,您仍然将主机设置为

$con = new PDO('mysql:host=localhost;dbname=example', 'usuario', 'clave');

将主机名更改为托管商提供的名称

$con = new PDO('mysql:host=hostinger_host_name;dbname=example', 'usuario', 'clave');

希望对你有帮助

【讨论】:

我知道,但我也有一张图表,它显示了。我认为是没有问题的。无论如何,谢谢你的回复:)【参考方案2】:

试试这个

<?php

$sql = $con->prepare("SELECT * FROM Products p, Prices ps, ProductsPrices pc where p.IDP=pc.IDP AND ps.ID=pc.ID ORDER BY p.IDP ASC'");
$sq->execute();

$results = $sql->fetchall(PDO::FETCH_ASSOC);

if (count($results > 0)) 

    foreach ($con->query($sql) as $row) 
        echo '<tr>';
        echo '<td>' . $row['IDP'] . '</td>';
        echo '<td>' . $row['Name'] . '</td>';
        echo '<td>' . $row['Description'] . '</td>';
        echo '<td style="color: #333;">' . $row['Price'] . '</td>';
        echo '<td>' . '<a class="btn" href="update.php?id=' . $row['IDP'] . '">Edit</a>' . '</td>';
        echo '</tr>';
    


?>

【讨论】:

【参考方案3】:

在 foreach 循环之前添加这一行

$sql = 'SELECT * FROM Products p, Prices ps, ProductsPrices pc where p.IDP=pc.IDP AND ps.ID=pc.ID ORDER BY p.IDP ASC';
$pdoStatement = $con->query($sql);
$data = $pdoStatement->fetchAll();
foreach($data as $row)
    //...

【讨论】:

嗨,感谢您的回答,我尝试了您的解决方案并给出了这个:致命错误:调用非对象上的成员函数 fetchAll()

以上是关于为托管程序中的 foreach php pdo 提供的参数无效的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO fetch 和 foreach - 我没有得到第一列

PHP Mysql PDO查询来自foreach存储的多个值以供输出

php pdo foreach

PHP:PDO foreach 不起作用

PDO 查询未在 PHP foreach 循环中返回结果

带有 foreach 和 fetch 的 PHP PDO