2

例如,假设我要执行以下查询:

SELECT * FROM posts;

因此,我写了以下内容:

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_posts`(IN `zip` INT)
  LANGUAGE SQL
  NOT DETERMINISTIC
  CONTAINS SQL
  SQL SECURITY DEFINER
COMMENT ''
BEGIN
  SELECT * FROM posts WHERE posts.zip = zip;
END

以下更改是我唯一要做的更改:

mysql_query("SELECT * FROM posts");
// to
mysql_query("CALL get_posts");

...然后我可以获取行等?

4

2 回答 2

6

您还需要提供参数

mysql_query("CALL get_posts(11)");

另一个建议是对此使用PDO扩展

使用 PDO 的示例,

<?php
    $zipCode = 123;
    $stmt = $dbh->prepare("CALL get_posts(?)");
    $stmt->bindParam(1, $zipCode);
    if ($stmt->execute(array($_GET['columnName']))) 
    {
        while ($row = $stmt->fetch()) 
        {
            print_r($row);
        }
    }
?>

这将保护您免受SQL 注入

于 2012-09-04T01:21:59.770 回答
5

你的过程需要一个输入参数,所以用一个来调用它:

$result = mysql_query("CALL get_posts(12345)");

这将在成功调用时提供结果资源,然后您可以像普通查询一样运行 fetch 循环。

if ($result) {
  // fetch in a while loop like you would any normal SELECT query...
}
于 2012-09-04T01:21:49.257 回答