0

嗨,

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

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

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

我不知道发生了什么,所以需要任何帮助。

4

3 回答 3

3

这是因为您在 PHP 中的查询是虚假的,请更改此:

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

对此:

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

或者更好的是,既然您已经在使用准备好的语句,请使用参数绑定,这样您就不必担心这种事情。

于 2013-02-17T22:47:07.333 回答
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
于 2013-02-17T22:48:56.427 回答
0

肖恩·布莱特回答了你的问题,但我更喜欢这个:

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

只是因为像 Notepad++ 这样的代码编辑器在字符串中突出显示变量使其易于阅读。

于 2013-02-17T22:51:04.683 回答