我正在向我的数据库发送SQL查询。它会超时,如果它是真的,但如果它是假的,它会完美地运行。首先,SQL代码:
BEGIN TRY
-- Insert statements for procedure here
--Set error variables
SELECT
@ErrorPosition = 10,
@CustomErrorMessage = 'Error 1';
IF EXISTS(SELECT a.CustID
FROM Logins a
LEFT JOIN Addrs b ON a.CustID = b.CustID
WHERE a.User = @username AND b.EMail = @email)
BEGIN
SELECT 'success'
END
ELSE
BEGIN
SELECT 'failure'
END
END TRY
BEGIN CATCH
EXECUTE dbo.LogError @ErrorModule, @ErrorPosition, @CustomErrorMessage
END CATCH
请注意,当我从SQL服务器手动运行它时,这实际上可以正常执行,无论是true还是false。
现在,评估FALSE(并且有效)的代码:
$sql = "EXEC Test @username='test_user',@email='wrong@example.com'";
$exec = odbc_exec($conn,$sql);
$result = odbc_result($exec,1);
echo $result;
此代码运行正常,输出失败' (正确的电子邮件是email@website.com)。 现在评估为TRUE的代码:
$sql = "EXEC Test @username='test_user',@email='email@website.com'";
$exec = odbc_exec($conn,$sql);
$result = odbc_result($exec,1);
echo $result;
这次超时。
PHP或SQL都不会记录任何错误。类似的IF EXISTS语句可以从PHP运行而没有错误。