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'
我无法弄清楚发生了什么,所以需要任何帮助。
答案 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变量在字符串中使它易于阅读。