2013-02-17 74 views
0

Hy,PHP mysqli無法取數據

我有一個奇怪的問題。這是代碼:

首先,我得到參數並連接到基地。

<?php 
    include('connect.php'); 
    $id=$_GET['id']; // if I echo this, it outputs 0 
    $category=$_GET['category'];// if I echo this, it outputs 'category1' 
    $name=$_GET['name']; 
?> 

現在我去從數據庫中提取數據:

<?php 
    if ($stmt = $mysqli->prepare("SELECT modelID,modelName,modelLogo FROM model,maker WHERE model.makerID=maker.makerID AND model.makerID='.$id.' AND model.modelCategory='.$category.' ORDER BY modelName")) { 

    $stmt->execute(); 

    $stmt->bind_result($modelID, $modelName,$modelLogo); 

    while ($stmt->fetch()) { 
     echo '<a href="edit_model.php?id='.$modelID.'"><div class="box"><img src="'.$modelLogo.'" /><p>'.$modelName.'</p></div></a>'; 
    } 

    $stmt->close(); 

    } 

    else { 
     printf("Prepared Statement Error: %s\n", $mysqli->error); 
    } 
?> 

不會輸出什麼。 但是,當我在myPhpAdmin運行SQL查詢,它返回的值。

查詢:

SELECT modelID,modelName,modelLogo 
FROM model,maker 
WHERE model.makerID=maker.makerID 
AND model.makerID='0' 
AND model.modelCategory='category1' 
ORDER BY modelName 

輸出:0 // //名路徑

我把error_reporting(E_ALL);但它不返回任何錯誤。另外,我試圖在$stmt->bind_result($modelID, $modelName,$modelLogo);之後加上這段代碼,結果如下:

var_dumb($modelID);die();它返回'0'。

var_dumb($modelName);die();它返回'NULL'。

var_dumb($modelLogo);die();它返回「NULL」

我想不通這是怎麼回事所以需要任何幫助。

回答

3

這是因爲你的PHP查詢是假的,改變這種:

... AND model.modelCategory='.$category.' ... 

要這樣:

... AND model.modelCategory='$category' ... 

或者更好的,因爲你已經在使用準備好的語句,使用parameter binding所以你不必擔心這種事情。

+1

他使用「圍繞查詢字符串,所以他只需要刪除。變量周圍,它應該工作 – clem 2013-02-17 22:49:07

+0

良好的捕獲。更新。 – 2013-02-17 22:50:15

+0

這工作,謝謝你爲我節省了很多麻煩 – Vucko 2013-02-17 22:52:39

3

你是不是綁定的參數。嘗試這個。

if ($stmt = $mysqli->prepare("SELECT modelID,modelName,modelLogo FROM model,maker 
    WHERE model.makerID=maker.makerID 
    AND model.makerID = ? AND model.modelCategory = ? 
    ORDER BY modelName")) { 
$stmt->bind_param('ss', $id, $category); 
//rest of the code intact 
+0

有用的信息這個未來。+1 – Vucko 2013-02-17 22:56:08

+0

使用預處理語句的整點是消毒的投入,以及與自動bind_param發生的。它將爲您節省了不少麻煩的未來。:) – Achrome 2013-02-17 22:57:35

+0

說實話,我覺得該綁定的參數僅用於DML(數據操作語言)querys(INSERT,UPDATE和DELETE語句)。我quess我想錯了。:) – Vucko 2013-02-17 23:00:25

0

肖恩明亮的回答你的問題,但我更喜歡這一個:

"SELECT 
    modelID, modelName, modelLogo 
FROM 
    model, maker 
WHERE 
    model.makerID=maker.makerID AND model.makerID='{$id}' 
AND 
    model.modelCategory='{$category}' 
ORDER BY modelName" 

正因爲這樣的代碼編輯器如記事本+ + hightlight在字符串變量,使其易於閱讀。