2

我正在尝试使用 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

4

6 回答 6

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
}
于 2013-01-11T22:27:56.213 回答
3

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

尝试...

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

希望能帮助到你。

于 2013-01-11T22:46:25.133 回答
1

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

$series如果变量:是用户定义的,您应该使用准备好的语句。

$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

于 2013-01-11T22:30:52.700 回答
1

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

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

于 2013-01-11T22:32:05.360 回答
1

试试这个

$result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = '$series' ");
于 2013-01-11T22:32:11.383 回答
0

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

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

只是一个提示:在调用 $mysqli->query 之前,首先使用您的命令文本构建一个字符串。并使用该字符串(如 $mysqli->query($cmd);

转储那个字符串:)可能会让你大开眼界;)

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

于 2013-01-11T22:30:43.997 回答