不知道是否有人可以提供帮助,但由于某种原因,在使用在动态 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 存储过程调用,以便在错误发生之前无论选择多少等我都会得到错误?