php - $ result-> fetch_array不起作用

时间:2013-01-11 22:23:32

标签: php mysql

我正在尝试使用GET方法在数据库中选择一个表。 现在当我在那里硬编码变量的值(表名)时,它按预期工作,并返回数组中的值。

但是当我尝试通过变量确定表名时,我收到以下错误:

  

致命错误:在

中的非对象上调用成员函数fetch_array()

现在我尝试了var_dump($result);,但返回bool(false)

现在变量确实带有一个值,因为当我将它回显到屏幕时,它会给出我期望的值。

那么为什么在为我的表搜索???

进行查询时不返回该值
     $result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = ". $series); //This where a change needs to happen

    var_dump($result);

        $posts = array();

        while($row = $result->fetch_array()) 
        {    
            $ID=$row['ID'];
            $sermonTitle=$row['sermonTitle'];
            $sermonSpeaker=$row['sermonSpeaker'];
            $sermonSeries=$row['sermonSeries'];
            $sermonDate=$row['sermonDate'];
            $linkToImage=$row['linkToImage'];
            $linkToAudioFile=$row['linkToAudioFile'];

            $posts []= array (
                'ID'=> $ID,
                'sermonTitle'=> $sermonTitle,
                'sermonSpeaker'=> $sermonSpeaker,
                'sermonSeries'=> $sermonSeries,
                'sermonDate'=> $sermonDate,
                'linkToImage'=> $linkToImage,
                'linkToAudioFile'=> $linkToAudioFile
            );
    }

    $response['posts'] = $posts;

    var_dump($posts);

PS我已经读过关于mysql样式的折旧,并且我知道必须使用mysqli编写。我正在运行PHP版本5.2.6-1 + lenny16

6 个答案:

答案 0 :(得分:3)

  

现在我尝试了var_dump($result);,但返回bool(false)

因为您的查询失败了。

尝试:

if( ! $result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = ". $series); ) {
  echo "An error has occurred: \n" . var_export($mysqli->error_list, TRUE);
} else {
  //do stuff
}

答案 1 :(得分:3)

如果$series是一个字符串,则需要在变量周围加上引号..

...试

$result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = '". $series ."'");

希望它有所帮助。

答案 2 :(得分:1)

$result = $mysqli->query("SELECT * FROM PodcastSermons WHERE sermonSeries = ". $series); //This where a change needs to happen

如果变量:$series是用户定义的,那么您应该使用Prepared Statements。

$result->prepare("SELECT * FROM PodcastSermons WHERE `sermonSeries`=?");
$result->bind_param('s', $series);
$result->execute();

另外,Print_r($ result);检查您的初始$result是否已填充;此外,在您的SQL查询中,sermonSeries是否与SQL表正确匹配?

<强>更新

while($row = $result->fetch_array()) 
        {    

尝试将此修改为:

while($row = $result->fetch_array(MYSQLI_ASSOC))
{

http://uk1.php.net/manual/en/mysqli-result.fetch-array.php

答案 3 :(得分:1)

在我看来,核心问题是:$series来自哪里?该变量在哪里被初始化?

如果您从网络表单传递此内容,则有两件事:使用$_GET$_POST(您在表单中使用的任何操作)。然后你必须清理那里的内容,以免受到SQL注入攻击。在这种情况下,准备好的陈述是你的朋友;它们有助于强化脚本以抵御这种攻击。

答案 4 :(得分:1)

试试这个

$result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = '$series' ");

答案 5 :(得分:0)

您的查询失败了。检查var_dump($ series);在执行之前。

我认为它可能是一个字符串,你只是不引用它?

只是一个提示:首先使用您的commandtext构建一个字符串 调用$ mysqli-&gt;查询。并使用该字符串(如$ mysqli-&gt; query($ cmd);

转储那个字符串:)可能会睁开眼睛;)

这样你可以提取它并直接对数据库执行它(f.e. phpmyadmin)。