1

誰かが助けてくれるかどうかはわかりませんが、何らかの理由で、動的 SQL 構文エラーの前に選択がある呼び出しストアド プロシージャを使用すると、PHP はエラーを報告しません。ワークベンチでストアド プロシージャを呼び出すと、エラーが表示されます。

基本設定MySQL:

create table testtable (testcolumn varchar(10), PRIMARY KEY (testcolumn));

DELIMITER ///
CREATE PROCEDURE teststoredproc ()
BEGIN

SELECT 'Select text';

SET @sql := 'SELECT * FROM testtable WHERE IFNULL(DATE(testcolumn), ''1900/01/01'' = DATE(''1900/01/01'')';
PREPARE stmtteststoredproc FROM @sql;
EXECUTE stmtteststoredproc;
DEALLOCATE PREPARE stmtteststoredproc;

END
DELIMITER ;

基本設定php

<?php
$DB_NAME = '';
$DB_HOST = '';
$DB_USER = '';
$DB_PASS = '';

$mysqli = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$result = mysqli_query($mysqli, "CALL teststoredproc();") or die("Query fail: " . mysqli_error());

while ($row = mysqli_fetch_array($result)){   
    echo $row[0];
}
?>

動的 SQL に構文エラーがあるためダイが実行される代わりに、while が実行され、「テキストの選択」がエコーされます。

問題は、エラーが発生する前に選択などの量に関係なくエラーが発生するように、php で mysql ストアド プロシージャ コールを正しく処理するにはどうすればよいかということです。

4

0 に答える 0