Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带通配符的PHP MySQLI面向对象_Php_Oop_Mysqli_Wildcard - Fatal编程技术网

带通配符的PHP MySQLI面向对象

带通配符的PHP MySQLI面向对象,php,oop,mysqli,wildcard,Php,Oop,Mysqli,Wildcard,我正在转换为Mysqli面向对象(或尝试)。我有各种类别的网页。我想在include中使用参数占位符“?”,然后在category页面上调出正确的类别。 这就是我所能做到的。如何在页面上显示类别?如果我指示其中category=apples,所有这些都可以正常工作 我有这个包括在一个类别页面的顶部 <?php require_once 'maincats_mysqli.php' ?> 详情如下: <?php $db = new mysqli('host', 'userN

我正在转换为Mysqli面向对象(或尝试)。我有各种类别的网页。我想在include中使用参数占位符
“?”
,然后在category页面上调出正确的类别。 这就是我所能做到的。如何在页面上显示类别?如果我指示
其中category=apples
,所有这些都可以正常工作

我有这个包括在一个类别页面的顶部

<?php require_once 'maincats_mysqli.php' ?>

详情如下:

<?php 
$db = new mysqli('host', 'userName', '', 'dbName');
if ($db->connect_error) {
    $error = $db->connect_error;
} else { 
$sql = "SELECT pageName, gImage, prodName, prodPrice 
FROM tableName 
WHERE category = '?' 

ORDER BY dtList DESC";

$stmt->bind_param('s', ['$category']);

$result = $db->query($sql);
if ($db->error) {
    $error = $db->error;
    }
}
function getItem($result) {
return $result->fetch_assoc();
    }
?>

您缺少
prepare()
。请看下表中的第一个示例:



请注意,您不能引用绑定的参数。

您缺少
prepare()
。请看下表中的第一个示例:



请注意,您不能引用绑定的参数。

首先,您不能声明
$stmt

其次,
在本例中不是通配符,而是参数占位符。您可以在准备查询时使用这些占位符,使用
$mysqli->prepare($sql)
。见文件:

第三,将变量封装在单引号中,因此它是一个带有美元和变量名称的字符串,而不是其内容。并且它不能位于数组中:

$stmt->bind_param('s', $category);
最后:
$category
来自哪里?你给我们看的脚本中没有定义它。我猜它来自
$\u GET
,因此前一行应该是:

$stmt->bind_param('s', $_GET['category']);
最后,您需要执行包含查询的语句:

$stmt->execute();
编辑

要获取结果,不需要使用
getItem()
函数。把它拿走

$result = $stmt->get_result();
然后您可以在
$result
上循环并获取每一行:

while ($item = $result->fetch_assoc()):

// do you stuff

endwhile;

请注意,我在这里使用了在您的情况下更清楚的(
endwhile
}
更明确)

首先,您不声明
$stmt

其次,
在本例中不是通配符,而是参数占位符。您可以在准备查询时使用这些占位符,使用
$mysqli->prepare($sql)
。见文件:

第三,将变量封装在单引号中,因此它是一个带有美元和变量名称的字符串,而不是其内容。并且它不能位于数组中:

$stmt->bind_param('s', $category);
最后:
$category
来自哪里?你给我们看的脚本中没有定义它。我猜它来自
$\u GET
,因此前一行应该是:

$stmt->bind_param('s', $_GET['category']);
最后,您需要执行包含查询的语句:

$stmt->execute();
编辑

要获取结果,不需要使用
getItem()
函数。把它拿走

$result = $stmt->get_result();
然后您可以在
$result
上循环并获取每一行:

while ($item = $result->fetch_assoc()):

// do you stuff

endwhile;

请注意,我在这里使用了在您的案例中更清楚的(
endwhile
}
更明确)

1)从
中删除单引号。。。类别=“?”…
。2) 请参阅此语句
$stmt->bind_param('s',['$category']),它应该是
$stmt->bind_param('s',$category)。3) 你没有执行你准备好的陈述。4) RTM,不要在变量上使用单引号。另见上文注释^。它也被称为
占位符
,而不是
通配符
。哦,我差点错过了,你甚至没有准备好你的查询。1)从
中删除单引号。。。类别=“?”…
。2) 请参阅此语句
$stmt->bind_param('s',['$category']),它应该是
$stmt->bind_param('s',$category)。3) 你没有执行你准备好的陈述。4) RTM,不要在变量上使用单引号。另见上文注释^。它也被称为
占位符
,而不是
通配符
。哦,我差点错过了,你甚至没有准备好你的查询。我真的很难做到这一点。该信息已在my db表中。我只需要将我的电子商务网站从MySQL转换为MySQLi。我以前在每个产品页面和分类页面上都有“选择”按钮,用来调出我需要的信息。我想我可以把Select放在MySQLi的一个包含中。我已经尝试了上面所有的建议,但似乎没有任何效果。我真的很难接受。该信息已在my db表中。我只需要将我的电子商务网站从MySQL转换为MySQLi。我以前在每个产品页面和分类页面上都有“选择”按钮,用来调出我需要的信息。我想我可以把Select放在MySQLi的一个包含中。我尝试了上面所有的建议,但似乎没有任何效果。