为托管程序中的 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 - 我没有得到第一列