phpからMySQLの(ルーチンタブ)ストアドプロシージャを呼び出すことができない件に関して。
お世話になります。何卒よろしくお願い致します。
以下のサイトを参考にphpからMySQLに設定した(ルーチンタブ内に作成した)ストアドプロシージャを起動させようとしておりますが、エラーが出ないものの、起動もできません。
以下はphpの記述と、MySQLの設定です。どこに問題があるかご指摘、ご教示等頂けませんでしょうか。
*php側では、db接続に関する記述($connect_db、$connect_user、$connect_passwd)を異なるものにするとエラーが出ます。また、$stmt = $dbh->prepareをprepaなどと変更するとエラーになりますが、CALL get_image(:code)自体をCALL get_ima(:code)と変更してもエラーが出ないことを考えると、データベースに接続し、$stmtを実行しようとしているのは確かだけれど、ストアドプロシージャの呼び出し、'CALL get_image(:code)'をしていない、あるいは、ができていないと考えられます。
*MySQLのストアドプロシージャのwhere句のcodeにテーブルtbl_productsに存在するproduct_id、例えば12を設定し、mySql上で”実行する”を押すと期待通りの結果になります。即ち設定したストアドプロシージャの内容、テーブル上でt1.main_image に t1.main_image_xを挿入致します。
データベース:MySQL5.0.77
PHP:5.0.22
WEBサーバ:apache2
phpの設定
try {
$connect_db = "mysql:dbname=xxxxxxx;host=localhost";
$connect_user = 'xxxxxxx';
$connect_passwd = 'xxxxxxx';
//データベース接続
$dbh = new PDO(
$connect_db,
$connect_user,
$connect_passwd,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
$stmt = $dbh->prepare('CALL get_image(:code)');
$code = '12';// 最終的にはシステム的に変数を代入する設定にする
$stmt->bindParam(':code', $code);
// ストアドプロシージャをコールします
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo $row['t1.main_image'];
}
} catch(PDOException $e){
var_dump($e->getMessage());
}
}
// 切断
$dbh = null;
MySQL ストアドプロシージャの設定
DELIMITER $$
CREATE DEFINER=`xxxxxxx`@`%` PROCEDURE `get_image(IN code varchar(2))`()
NO SQL
BEGIN
UPDATE tbl_products t1 SET t1.main_image = t1.main_image_x WHERE t1.product_id = code;
End$$
DELIMITER ;