PHP mysqli无法获取数据

时间:2013-02-17 22:44:03

标签: php mysqli prepared-statement

Hy,

我有一个奇怪的问题。这是代码:

首先,我获取参数并连接到基础。

<?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'];
 ?>

现在我去db:

获取数据
<?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 个答案:

答案 0 :(得分:3)

这是因为你在PHP中的查询是假的,改变这个:

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

对此:

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

或者更好,因为您已经在使用预准备语句,请使用parameter binding,这样您就不必担心这类事情了。

答案 1 :(得分: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

答案 2 :(得分:0)

Sean Bright回答了你的问题,但我更喜欢这个:

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

正因为这样的代码编辑器如Notepad ++ hightlight变量在字符串中使它易于阅读。