CentOS 6.4 PHP 5.3.3 MySQL 5.1.69 x86_64
mysql_stmt::fetch()
プリペアド ステートメントを使用してフェッチを実行すると、PHP で次のエラーが発生します。
これは、一時テーブルの作成に使用される SELECT ステートメントに含まれる変数が設定解除されている場合に発生します。これは、ストアド プロシージャが呼び出される前に変数が環境に設定されているかどうかに関係なく発生します。変数は、ストアド プロシージャ内で設定する必要があります。SELECT ステートメントを使用して一時テーブルのデータを PHP に返し、PHP が mysql_stmt::fetch() を使用してデータにアクセスすると、PHP は上記の致命的なエラーを生成します。
MySQL コード:
DELIMITER $$
CREATE PROCEDURE test_sp()
BEGIN
# uncomment below line, and PHP call to mysqli_stmt::fetch() works
# SET @status = 1;
# remove tmp table
DROP TABLE IF EXISTS tmp_table;
# CREATE TEMPORARY TABLE
CREATE TEMPORARY TABLE tmp_table
SELECT @status AS status;
SELECT * FROM tmp_table;
END $$
DELIMITER ;
PHP コード:
// obtain MySQL login info
require_once(MYSQLOBJ);
// initialize status
$status = "";
$db = new mysqli(
DB_HOST,
DB_USER,
DB_PASSWORD,
DB_NAME
);
$query = "CALL test_sp";
$stmt = $db->prepare($query);
$stmt->execute();
$stmt->bind_result( $status );
$stmt->store_result();
$stmt->fetch(); // PHP FATAL ERROR OCCURS HERE
$stmt->free_result();
$db->close();
print "<p>status = $status</p>\n";