2013-01-11 39 views
2

我想用GET方法在我的數據庫中選擇一個表。 現在,當我硬編碼變量的值(表名)時,它按預期工作,並返回數組中的值。

但是當我通過一個變量來確定表名,我得到以下錯誤:

Fatal error: Call to a member function fetch_array() on a non-object in

現在,我已經試過了,但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

+1

您的查詢失敗,這就是爲什麼'$ result'爲false。查詢後錯誤將在'$ mysqli-> error'中提供。 – datasage

回答

3

如果$series是你需要把周圍的變量引號的字符串..

嘗試...

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

希望它能幫助。

+0

那是否:-)謝謝:-) –

3

Now I have tried the var_dump($result); but that returns 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 
} 
+0

這現在給我致命錯誤:調用未定義的方法mysqli :: var_export() –

+0

@JeffKranenburg是的,我只是注意到破碎的'$ mysqli-> var_export()'位並修復它。 – Sammitch

0

查詢只是失敗。檢查var_dump($ series);在執行之前。

我認爲這可能是一個字符串,你只是不引用它?

只是一個提示:首先用你的命令文本在 之前建立一個字符串,調用$ mysqli-> query。並使用該字符串(如$ mysqli->查詢($ CMD);

轉儲字符串:)可能會打開你的眼睛;)

這樣你可以將其解壓縮,並直接對數據庫執行它(FE phpMyAdmin的)。

+0

當我將它傳遞給另一個變量並回顯,打印以及我能想到的任何東西時,似乎都沒有問題。 –

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

+0

你的代碼不會幫助我,對不起 - 是的變量是完全一樣的 - 我複製並粘貼它確保:-) –

+0

@JeffKranenburg只是在一個遠射,請嘗試我的更新 –

1

的中心問題似乎對我說:哪裏$series從何而來?該變量從何處獲得初始化?

如果你從web表單,兩件事情通過這樣的:要麼使用$_GET$_POST(任何動作你在表單中使用)。然後你必須清理來自那裏的內容,以便不容易受到SQL注入攻擊。在這種情況下,準備好的陳述是你的朋友;他們幫助強化你的腳本免受這種攻擊。

+0

它被初始化在在<?php - $ series = $ _GET ['series'];目前它只是來自一個URL,它將在以後更改 - http://url.com/test.php?series=nameOfTable –

+0

然後我想我知道發生了什麼事情:你需要引用字符串爲查詢工作:...''系列='「。$系列。」'「' –

+0

此外,請自己幫忙,並花時間把它做成準備好的聲明。這是值得的。 –

1

試試這個

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