使用预准备语句从mysql查询中获取多行?

时间:2014-02-16 02:43:13

标签: php mysql sql mysqli prepared-statement

我在准备好的语句上经历了一些tutorials,我无法弄清楚如何循环包含多行的结果。我习惯了

的程序风格
while($row = mysqli_fetch_array($result))

然而,我不能为我的生活弄清楚如何使用准备好的语句格式来做到这一点。

if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE '%?%'")){

        $stmt->bind_param("s", $query); //query is $_GET['query'], user input

        $stmt->execute();
        $result = null;
        $stmt->bind_result($result);

        while($stmt->fetch()){ //problematic code...
            echo $result;
        }

        $stmt->close();
}

如何循环遍历PHP中预准备语句SQL查询所产生的多行?

编辑(根据要求提供新代码):

/* Create a prepared statement */
    if($stmt = $mysqli->prepare("SELECT name, price, description, file FROM `Products` WHERE name LIKE '%?%'")){

        $stmt->bind_param("s", $query) or die('bind_param');
        $query = trim(htmlspecialchars($_GET['query']));
        $stmt->execute() or die('execute');
        $stmt->bind_result($name, $price, $description, $file) or die('bind_result');


        while($stmt->fetch()){
            echo $name;
        }

        $stmt->close();
    }

2 个答案:

答案 0 :(得分:2)

你的问题不是暂时的,而是在LIKE中。你的SELECT应该是:

"SELECT * FROM `Products` WHERE name LIKE ?"

你的$ query变量:

$query = '%'.$_GET['query'].'%';

答案 1 :(得分:1)

替换此

if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE '%?%'")){

用这个

if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE ?")){

那么每件事都可以。)

原因是当你使用'%?%'时php不明白?喜欢需要参数