2012-03-15 27 views
0

我一直試圖破解這個2小時,但有些錯誤。我非常習慣於在沒有mysqli的情況下執行任何操作,但是請讀一下,建議從常規mysql命令轉向它。因此,我堅持以下幾點:php mysqli select resultset is not showing anything

<?php 
      $mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb'); 
      if ($result = $mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'")) { 
       while ($row = $result->fetch_object()) { 
        echo "<h2>Result:</h2><br>"; 
        echo "ID: " . $row->id . "<br>";     
        echo "Name: " . $row->cust_name . "<br>"; 
        echo "Invoice No: " . $row->invoice_num . "<br>"; 
        echo "Date: " . $row->date_recorded . "<br>"; 
       } 

      } 

     ?> 

此代碼是在應該顯示的查詢結果,但什麼都不顯示的頁面中。我檢查了關鍵字和queryType變量都已設置,並且它們包含正確的值。任何幫助將不勝感激。所有我試圖做的是:select語句根據提交的invoice_num檢索所有細節。

編輯:從幫助我收到了,我能得到這個工作:

$query = "SELECT * FROM records WHERE ".$queryType. " LIKE '%$keyword%' "; 
       if ($result = $mysqli->query($query)) { 
        while ($row = $result->fetch_object()) { 
         echo "<h2>Result:</h2><br><hr/> "; 
         echo "ID: " . $row->id . "<br>";     
         echo "Name: " . $row->cust_name . "<br>"; 
         echo "Invoice No: " . $row->invoice_num . "<br>"; 
         echo "Date: " . $row->date_recorded . "<br>"; 
         echo "<hr/>"; 
        } 

       } 
+0

其中是$ queryType和$關鍵字定義? – 2012-03-15 16:07:57

+0

你確定有數據可供選擇嗎?如果實際存在,該代碼將僅輸出數據。 – deed02392 2012-03-15 16:06:48

+0

如果我在使用mysqli的語法中遇到錯誤,我更擔心......它是基於OOP的舊語法的一次飛躍。 – 2012-03-15 16:08:29

回答

1

你肯定有數據來選擇?如果實際存在,此代碼將僅輸出數據。

確保$queryType$keyword設置和有理智的價值,將產生一個結果

緊接在查詢之前使用var_dump($queryType)var_dump($keyword)。現在檢查你的輸出。他們都是字符串嗎?直接在PHPMyAdmin中運行此查詢並檢查您獲得的行數。

如果你不能做到這一點嘗試echo'ing與查詢值返回的行數一起:

if ($result = $mysqli->query("SELECT * FROM records WHERE $queryType = '$keyword'")) 
{ 
    while ($row = $result->fetch_object()) 
    { 
     echo "<h1>Query WHERE '$queryType' = '$keyword' yielded {$result->num_rows} rows!</h1>"; 
     echo "<h2>Result:</h2><br>"; 
    ... 

注意,你不應該有列($查詢類型),如果周圍的單引號你堅持說你應該使用反引號(`),但它確實沒有必要 - 如果你那麼迂腐,你應該使用準備好的語句。

此外一定要過濾它們的任何可能允許SQL注入潛在危險的值。請參閱:mysqli::real_escape_string

+0

任何想法我該怎麼辦?我還沒有開始工作?因爲否則我需要爲硬編碼查詢的每個可能性創建函數 – 2012-03-16 05:13:22

+0

這很愚蠢。查看我的更新。 – deed02392 2012-03-16 09:05:11

+0

嘿,我做了一些工作,我覺得和你真的很相似。但是,感謝您的幫助!我知道它有使用%的漏洞,但並不重要,因爲它是安全的搜索,而不是公開的。我的代碼更新超過 – 2012-03-17 05:11:30

1

假設$queryType是您的記錄表中​​列的名稱,那麼我相信問題是您的WHERE子句。

不是:

$mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'") 

你應該有:

$mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'") 

請注意,我已經刪除了單引號括起來$queryType並使用complex (curly) syntax

而且,在未來的你可能想嘗試使用else塊來捕獲錯誤:

 $mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb'); 
     if ($result = $mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'")) { 
      while ($row = $result->fetch_object()) { 
       echo "<h2>Result:</h2><br>"; 
       echo "ID: " . $row->id . "<br>";     
       echo "Name: " . $row->cust_name . "<br>"; 
       echo "Invoice No: " . $row->invoice_num . "<br>"; 
       echo "Date: " . $row->date_recorded . "<br>"; 
      } 

     } 
     else 
     { 
       echo "Error: " . $mysqli->error; 
     } 
+0

,沒有工作brian..sorry讓你失望:(我改變了括號,但沒有再次顯示 – 2012-03-15 16:44:14