PHP MySQLI面向对象的通配符

时间:2016-05-14 00:33:28

标签: php oop mysqli wildcard

我正在转换为面向对象的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
   }
?>

2 个答案:

答案 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()

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