从PHP调用MySQL过程

时间:2012-09-04 01:17:06

标签: php mysql

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

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");

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

2 个答案:

答案 0 :(得分:6)

您还需要提供参数

mysql_query("CALL get_posts(11)");

另一个建议是在此使用 PDO extension

使用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 Injection

答案 1 :(得分:5)

您的过程需要输入参数,因此请使用以下参数调用:

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

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

if ($result) {
  // fetch in a while loop like you would any normal SELECT query...
}