例如,假设我想执行以下查询:
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");
...然后我可以获取行等?
答案 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...
}