【发布时间】:2014-07-05 15:08:37
【问题描述】:
我有一个 1and1 的 V-server。不幸的是,支持不够。
此代码是登录文件的一部分,已经运行了将近 1.5 年。从昨天开始,execute 语句返回 false。
我尝试了不同的东西,但我不知道为什么执行 return false ?
$mail = "test";
$password = "test";
$prep = "SELECT id FROM member WHERE address=? AND password=?";
if ( $stmt = $mysqli->prepare($prep))
{
$stmt->bind_param( "ss", $mail, $password );
$stmt->execute();
$stmt->bind_result($id);
if ($stmt->fetch())
..........
当我减少 SELECT 语句并删除 AND 时,$stmt->execute() 返回 TRUE。
$mail = "test";
$password = "test";
$prep = "SELECT id FROM member WHERE address=?";
if ( $stmt = $mysqli->prepare($prep))
{
$stmt->bind_param( "s", $mail );
$stmt->execute();
$stmt->bind_result($id);
if ($stmt->fetch())
..........
当我添加 AND 或 OR 时,它再次失败?
$mail = "test";
$password = "test";
$prep = "SELECT id FROM member WHERE address=? OR password=?";
if ( $stmt = $mysqli->prepare($prep))
{
$stmt->bind_param( "ss", $mail, $password );
$stmt->execute();
$stmt->bind_result($id);
if ($stmt->fetch())
..........
【问题讨论】:
-
请记住,托管支持永远不会扩展到调试程序 - 责任始终在于客户。调试是一个明智的主机永远不会进入的雷区。
-
将错误报告添加到文件顶部
error_reporting(E_ALL); ini_set('display_errors', 1);看看它是否产生任何结果。 -
如果
if失败,请使用$mysqli上的相应错误获取器查找错误。 (@Fred 的建议是合理的,但如果您在实时站点上进行了更改,请确保再次将其更改回来 - 实时站点不应启用错误报告)。 -
password列还存在吗? -
感谢您的快速回复。我将添加错误报告,看看我得到了什么。是的,密码仍然存在。当我用密码交换邮件时,选择查询也有效。只有当我在选择中有 2 列时它才会失败。但是执行返回 FALSE。准备和 bind_param 返回 TRUE。我同意一半。但这并不是一个新的发展。这边运行一年多没有变化。我希望房东能告知他们如果一天又一天发生这种情况,他们会发生什么变化。
标签: php mysql select prepared-statement