我正在尝试使用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
答案 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))
{
答案 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)。