我正在转换为面向对象的Mysqli(或尝试)。我有各种类别页面。我想在include中使用参数占位符'?'
,然后在类别页面上调用正确的类别。
这是我已经得到的。如何在我的页面上指明类别?如果我指出WHERE 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();
}
?>
以下是一个类别页面的一部分。我如何指出哪个类别?任何帮助将不胜感激。
<?php
if (isset($error)) {
echo "<p>$error</p>";
}
?>
<?php
while ($item = getItem($result)) {
?>
<a href="http://www.example.com/<?php echo $item['pageName']; ?>">
<img src="http://www.example.com/<?php echo $item['gImage']; ?>"</a>
<a href="http://www.example.com/<?php echo $item['pageName']; ?>">
<?php echo $item['prodName']; ?></a>
<?php echo $item['prodPrice']; ?>
<?php
}
?>
答案 0 :(得分:2)
首先,您不要声明$stmt
。
其次,?
在这种情况下不是通配符,它是参数占位符。您可以在准备查询时使用$mysqli->prepare($sql)
来使用此类占位符。请参阅文档:http://php.net/manual/en/mysqli-stmt.bind-param.php
$sql = "SELECT pageName, gImage, prodName, prodPrice
FROM tableName
WHERE category = ?
ORDER BY dtList DESC";
$stmt = $db->prepare($sql);
第三,您将变量封装在单引号中,因此它是一个带有美元和变量名称的字符串,而不是其内容。并且它不能在数组中:
$stmt->bind_param('s', $category);
最后:$category
来自哪里?它没有在您向我们展示的脚本中定义。我想它来自$_GET
,所以上一行应该是:
$stmt->bind_param('s', $_GET['category']);
最后,您需要执行包含查询的语句:
$stmt->execute();
修改强>:
要获取结果,您不需要getItem()
功能。只需删除它。
$result = $stmt->get_result();
然后你可以遍历$result
并获取每一行:
while ($item = $result->fetch_assoc()):
// do you stuff
endwhile;
请注意,我在这里使用PHP control structure alternative syntax,在您的情况下更明确(endwhile
比}
更明确)
答案 1 :(得分:1)
你错过了#include "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/complex.h"
。请查看PHP manual page中的第一个示例:
prepare()
请注意,您不得引用绑定参数。