'foreach'查询适用于Localhost但不适用于Server - PHP,MySQLi

时间:2014-01-04 17:43:17

标签: php mysqli localhost

以下查询本地主机(PHP / 5.4.22)

<?php
global $db;    
$query = $db->query("SELECT * FROM player WHERE playerID = '181783'") or die(mysqli_error($db));                
foreach ($query as $row) {
    $fName = $row['fName'];
    echo "First Name: " . $fName;    
}           
?>

我的虚拟主机(PHP / 5.3.28)

此查询返回

  

名字:名字:名字:名字:名字:

目前只有1个结果返回,其中playerID = 181783,它应该回显名称'Mario'

当我在我的虚拟主机上运行如下所示的查询时,它可以工作并回复马里奥。

$query2 = $db->query("SELECT * FROM player WHERE playerID = '181783'");                             
$result = $query2->fetch_object();                
echo $result->fName;

所以这必须意味着db连接设置正确,因为query2在同一页面上工作,只是出于某种原因,查询一不会回显结果,但显示'First Name:'5次。

对于我在整个网站中使用过的所有foreach()函数都是这样的,所以我不能只查询2。

总结一下,两个查询都在localhost上工作,当上传到我的webhost时,只有查询2可以工作。

尽管error_reporting(E_ALL)没有错误;正在启用

我该怎么办? 感谢。

编辑 - 数据库配置

//MySQLI configuration
$_CONFIG['mysql']['hostname'] = 'localhost';
$_CONFIG['mysql']['username'] = '#';
$_CONFIG['mysql']['password'] = '#';
$_CONFIG['mysql']['database'] = '#';

//Initialize MySQLi connection
$db = new mysqli($_CONFIG['mysql']['hostname'], $_CONFIG['mysql']['username'], $_CONFIG['mysql']['password'], $_CONFIG['mysql']['database']);
if ($db->connect_errno) {
    die("MySQLi error: ".$db->connect_error);
}

3 个答案:

答案 0 :(得分:3)

问题只是mysqli::query返回mysqli_result类的实例,在PHP 5.4出现之前没有实现Traversable接口(see the man pages正在改变日志)。
你自己承认你的webhost运行5.3:“webhost(PHP / 5.3.28)”,所以你的代码不起作用,因为$query的值(不是'查询但结果集不可迭代。

只需将代码更改为我们以前所看到的内容:

$result = $db->query('Your query here');
if (!$result) throw new Exception('Query Failed!');
while($row = $result->fetch_assoc())
{
    echo 'First name: ', $row['fName'];
}

完成工作。

注意:
这样就解决了这个问题,但是你最好还是服务器升级,或者至少是复制生产环境的测试环境!

我还注意到代码中的or die。请不要这样做,特别是在生产/实时环境中。谷歌“或死必死”。这是一个过时的结构。除了向客户端显示系统的错误消息之外,它的代码味道并没有真正任何东西。那不好。

答案 1 :(得分:0)

试试这个,需要添加$rows = $query->fetch_array();

 $query = $db->query("SELECT * FROM player WHERE playerID = '181783'") or die(mysqli_error($db));    
$rows = $query->fetch_array();              
foreach ($rows as $row) {

答案 2 :(得分:0)

Your first code snippet $query  only executes query :

您缺少 $ query-&gt; fetch_object();

示例

$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

if ($result = $mysqli->query($query)) {

    /* fetch object array */
    while ($obj = $result->fetch_object()) {
        printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
    }

    /* free result set */
    $result->close();
}