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

これにより、呼び出しが成功すると結果リソースが提供され、通常のクエリと同様にフェッチ ループを実行できます。

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