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 中存在语法错误而执行 die,而是 while 将运行并回显“选择文本”。

问题是我如何正确处理 php 中的 mysql 存储过程调用,以便在错误发生之前无论选择多少等我都会得到错误?

4

0 回答 0