2013-02-17 76 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在字符串变量,使其易于阅读。