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”
我想不通这是怎么回事所以需要任何帮助。
答
这是因为你的PHP查询是假的,改变这种:
... AND model.modelCategory='.$category.' ...
要这样:
... AND model.modelCategory='$category' ...
或者更好的,因为你已经在使用准备好的语句,使用parameter binding所以你不必担心这种事情。
答
你是不是绑定的参数。尝试这个。
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
答
肖恩明亮的回答你的问题,但我更喜欢这一个:
"SELECT
modelID, modelName, modelLogo
FROM
model, maker
WHERE
model.makerID=maker.makerID AND model.makerID='{$id}'
AND
model.modelCategory='{$category}'
ORDER BY modelName"
正因为这样的代码编辑器如记事本+ + hightlight在字符串变量,使其易于阅读。
他使用“围绕查询字符串,所以他只需要删除。变量周围,它应该工作 – clem 2013-02-17 22:49:07
良好的捕获。更新。 – 2013-02-17 22:50:15
这工作,谢谢你为我节省了很多麻烦 – Vucko 2013-02-17 22:52:39