0

手順

delimiter $$
drop procedure if exists db1.test;
create procedure db1.test()
deterministic
begin
    select * from table1;
end$$
delimiter ;

phpコード:

$conn = new mysqli('localhost','username','passwd','db1');
$query1 = 'select * from table1';
$query2 = 'call test()';

その後、 bool(false)を返し$conn->query($query1)ながら動作します。$conn->query($query2)しかし、mysqlでは、query1とquery2の両方が機能します。

ここで何が恋しかったですか?ありがとう!

4

2 に答える 2

0

プロシージャが作成されていますか? MySQL Workbench と phpMyAdmin の両方が、select * from table; に構文エラーがあることを通知しています。--- table が予約語だからでしょうか。これはMySQL Workbenchで機能しました:

USE `db1`;
DROP procedure IF EXISTS `test`;
DELIMITER $$
USE `db1`$$
CREATE PROCEDURE `db1`.`test` ()
BEGIN
    select * from `table`;
END
$$

DELIMITER ;

テーブルへのバッククォートの追加に注意してください。私のシステムでその変更を行うと、 $query2 は成功しますが、 $query1 は失敗します (もちろん手順の変更の有無にかかわらず)

于 2012-07-22T00:53:41.417 に答える
0

わかりました、それが構文ではない場合、それは権限である可能性があります. このデータベースのユーザーに実行権限を付与しましたか?

編集:

これを行うための SQL は次のとおりです。

GRANT EXECUTE ON `db1` . * TO 'user'@'localhost';

(ストアド プロシージャ内の SQL を個々のクエリとして実行するために必要なすべての権限をユーザーが持っている場合でも、実際にプロシージャを呼び出すには EXECUTE 権限が必要です。)

于 2012-07-22T01:03:34.543 に答える