为什么需要在每个存储过程之前包含连接文件
Why need to include connection file before every stored procedure
我有一个 php
文件,它正在调用一些 stored procedures
.
include "../../commonFilesForAll/db.php";
$tagQueryQcWaiting = "CALL qcWaitingQuery()";
$tagQueryQcWaitingExecute = mysqli_query($conn, $tagQueryQcWaiting);
$qcWaiting = mysqli_num_rows($tagQueryQcWaitingExecute);
$tagQueryQcFailed = "CALL qcFailedQuery()";
$tagQueryQcFailedExecute = mysqli_query($conn, $tagQueryQcFailed);
$qcFailed = mysqli_num_rows($tagQueryQcFailedExecute);
$tagQueryQcAssigned = "CALL qcAssignedQuery()";
$tagQueryQcAssignedExecute = mysqli_query($conn, $tagQueryQcAssigned);
$qcAssigned = mysqli_num_rows($tagQueryQcAssignedExecute);
但是当我给出上面的方法时,它不起作用。我必须在每个查询之前包含连接文件,如下所示,以便它按如下所示工作
include "../../commonFilesForAll/db.php";
$tagQueryQcWaiting = "CALL qcWaitingQuery()";
$tagQueryQcWaitingExecute = mysqli_query($conn, $tagQueryQcWaiting);
$qcWaiting = mysqli_num_rows($tagQueryQcWaitingExecute);
include "../../commonFilesForAll/db.php";
$tagQueryQcFailed = "CALL qcFailedQuery()";
$tagQueryQcFailedExecute = mysqli_query($conn, $tagQueryQcFailed);
$qcFailed = mysqli_num_rows($tagQueryQcFailedExecute);
include "../../commonFilesForAll/db.php";
$tagQueryQcAssigned = "CALL qcAssignedQuery()";
$tagQueryQcAssignedExecute = mysqli_query($conn, $tagQueryQcAssigned);
$qcAssigned = mysqli_num_rows($tagQueryQcAssignedExecute);
我的存储过程示例如下
qcWaitingQuery
BEGIN
SELECT * FROM plannertags WHERE (`status` = '0' OR `status` = '2')
AND currentStage = '12'
AND assignedTo = '0'
AND handoverStatus = '0'
AND failedStatus = '0'
ORDER BY deliveryDate ASC;
END
qcFailedQuery
BEGIN
SELECT * FROM plannertags t JOIN failedTable n on t.srNumber = n.plannerTagsSrNumber
WHERE (t.status = 0 OR t.status = 2)
AND t.currentStage = '12'
AND t.assignedTo = '0'
AND t.handoverStatus = '0'
AND n.failedDepartment = '12'
AND n.status = '0'
AND n.latestTag='1'
ORDER BY t.deliveryDate ASC;
END
qcAssignedQuery
BEGIN
SELECT *FROM plannertags t JOIN qctable n on t.srNumber = n.plannerTagsSrNumber
WHERE (t.status = 0 OR t.status = 2)
AND t.currentStage = '12'
AND t.assignedTo = '12'
AND t.handoverStatus = '0'
AND n.failedStatus = '0'
AND n.qcHold != '1'
ORDER BY t.deliveryDate ASC;
END
我的db.php
文件如下
$servername = "111.11.11.111";
$username = "111";
$password = "111111";
$database = "111";
$conn = mysqli_connect($servername, $username, $password, $database);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
有谁知道为什么会这样吗?
不需要每次都打开连接。你的错误是你正在调用一个存储过程但你没有获取所有结果。 SP 有一个隐藏的行为,即它们总是 return 一个结果在你在它们里面的 SELECT
语句之上。这意味着您有两个结果需要正确获取,否则会出现不同步错误。
每次调用存储过程后获取第二个结果,它应该可以工作。
include "../../commonFilesForAll/db.php";
$tagQueryQcWaiting = "CALL qcWaitingQuery()";
$tagQueryQcWaitingExecute = mysqli_query($conn, $tagQueryQcWaiting);
$qcWaiting = mysqli_num_rows($tagQueryQcWaitingExecute);
mysqli_next_result($conn); // fetch the empty result of SP call
如果正确配置了 mysqli,您会看到正确的不同步错误。您的连接脚本不正确。您必须始终启用错误报告。将其替换为:
$servername = "111.11.11.111";
$username = "111";
$password = "111111";
$database = "111";
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = mysqli_connect($servername, $username, $password, $database);
确保删除 if
语句。您还应该设置正确的连接字符集。 Please read the manual for more information.
我有一个 php
文件,它正在调用一些 stored procedures
.
include "../../commonFilesForAll/db.php";
$tagQueryQcWaiting = "CALL qcWaitingQuery()";
$tagQueryQcWaitingExecute = mysqli_query($conn, $tagQueryQcWaiting);
$qcWaiting = mysqli_num_rows($tagQueryQcWaitingExecute);
$tagQueryQcFailed = "CALL qcFailedQuery()";
$tagQueryQcFailedExecute = mysqli_query($conn, $tagQueryQcFailed);
$qcFailed = mysqli_num_rows($tagQueryQcFailedExecute);
$tagQueryQcAssigned = "CALL qcAssignedQuery()";
$tagQueryQcAssignedExecute = mysqli_query($conn, $tagQueryQcAssigned);
$qcAssigned = mysqli_num_rows($tagQueryQcAssignedExecute);
但是当我给出上面的方法时,它不起作用。我必须在每个查询之前包含连接文件,如下所示,以便它按如下所示工作
include "../../commonFilesForAll/db.php";
$tagQueryQcWaiting = "CALL qcWaitingQuery()";
$tagQueryQcWaitingExecute = mysqli_query($conn, $tagQueryQcWaiting);
$qcWaiting = mysqli_num_rows($tagQueryQcWaitingExecute);
include "../../commonFilesForAll/db.php";
$tagQueryQcFailed = "CALL qcFailedQuery()";
$tagQueryQcFailedExecute = mysqli_query($conn, $tagQueryQcFailed);
$qcFailed = mysqli_num_rows($tagQueryQcFailedExecute);
include "../../commonFilesForAll/db.php";
$tagQueryQcAssigned = "CALL qcAssignedQuery()";
$tagQueryQcAssignedExecute = mysqli_query($conn, $tagQueryQcAssigned);
$qcAssigned = mysqli_num_rows($tagQueryQcAssignedExecute);
我的存储过程示例如下
qcWaitingQuery
BEGIN
SELECT * FROM plannertags WHERE (`status` = '0' OR `status` = '2')
AND currentStage = '12'
AND assignedTo = '0'
AND handoverStatus = '0'
AND failedStatus = '0'
ORDER BY deliveryDate ASC;
END
qcFailedQuery
BEGIN
SELECT * FROM plannertags t JOIN failedTable n on t.srNumber = n.plannerTagsSrNumber
WHERE (t.status = 0 OR t.status = 2)
AND t.currentStage = '12'
AND t.assignedTo = '0'
AND t.handoverStatus = '0'
AND n.failedDepartment = '12'
AND n.status = '0'
AND n.latestTag='1'
ORDER BY t.deliveryDate ASC;
END
qcAssignedQuery
BEGIN
SELECT *FROM plannertags t JOIN qctable n on t.srNumber = n.plannerTagsSrNumber
WHERE (t.status = 0 OR t.status = 2)
AND t.currentStage = '12'
AND t.assignedTo = '12'
AND t.handoverStatus = '0'
AND n.failedStatus = '0'
AND n.qcHold != '1'
ORDER BY t.deliveryDate ASC;
END
我的db.php
文件如下
$servername = "111.11.11.111";
$username = "111";
$password = "111111";
$database = "111";
$conn = mysqli_connect($servername, $username, $password, $database);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
有谁知道为什么会这样吗?
不需要每次都打开连接。你的错误是你正在调用一个存储过程但你没有获取所有结果。 SP 有一个隐藏的行为,即它们总是 return 一个结果在你在它们里面的 SELECT
语句之上。这意味着您有两个结果需要正确获取,否则会出现不同步错误。
每次调用存储过程后获取第二个结果,它应该可以工作。
include "../../commonFilesForAll/db.php";
$tagQueryQcWaiting = "CALL qcWaitingQuery()";
$tagQueryQcWaitingExecute = mysqli_query($conn, $tagQueryQcWaiting);
$qcWaiting = mysqli_num_rows($tagQueryQcWaitingExecute);
mysqli_next_result($conn); // fetch the empty result of SP call
如果正确配置了 mysqli,您会看到正确的不同步错误。您的连接脚本不正确。您必须始终启用错误报告。将其替换为:
$servername = "111.11.11.111";
$username = "111";
$password = "111111";
$database = "111";
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = mysqli_connect($servername, $username, $password, $database);
确保删除 if
语句。您还应该设置正确的连接字符集。 Please read the manual for more information.