PHP mysqli可以';无法获取数据

PHP mysqli可以';无法获取数据,php,mysqli,prepared-statement,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']; ?> 输出:0//name//path 我把

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'];
 ?>
输出:0//name//path

我把
错误报告(E_ALL)放进去但它不会返回任何错误。此外,我还尝试将此代码放在
$stmt->bind_结果($modelID、$modelName、$modelLogo)之后结果如下:

var_dumb($modelID);模具()它返回了“0”

var_dumb($modelName);模具()返回“NULL”

var_dumb($modelbogo);模具()返回“NULL”


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

这是因为您在PHP中的查询是伪造的,请更改以下内容:

... AND model.modelCategory='.$category.' ...
为此:

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

或者更好,因为您已经在使用准备好的语句,所以使用它,这样您就不必担心这种事情。

这是因为您在PHP中的查询是假的,请更改以下内容:

... AND model.modelCategory='.$category.' ...
为此:

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

或者更好,因为您已经在使用准备好的语句,所以可以使用,这样您就不必担心这类事情。

您没有绑定参数。试试这个

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

您没有绑定参数。试试这个

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"

仅仅是因为诸如Notepad++hightlight字符串中的变量这样的代码编辑器使其易于阅读。

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之类的代码编辑器使字符串中的变量更易于阅读。

他在查询字符串周围使用了“环绕查询字符串,所以他只需删除。环绕变量,他应该使用”环绕查询字符串,所以他只需删除查询字符串。围绕这些变量,在将来了解这一点应该很有用+1使用prepared语句的全部目的是清理输入,而bind_param会自动进行清理。这将在将来为您节省很多麻烦。:)说实话,我认为绑定参数只用于DML(数据操作语言)查询(INSERT、UPDATE和DELETE语句)。我怀疑我想错了很高兴将来知道这一点+1使用prepared语句的全部目的是清理输入,而bind_param会自动进行清理。这将在将来为您节省很多麻烦。:)说实话,我认为绑定参数只用于DML(数据操作语言)查询(INSERT、UPDATE和DELETE语句)。我怀疑我想错了