【问题标题】:prepare->execute returns false [closed]准备->执行返回false [关闭]
【发布时间】:2015-06-10 17:41:19
【问题描述】:

我在 php/mySql 中遇到了一个小问题。

代码如下:

$updateLastchange = "UPDATE lastchange SET student = ? date = ? WHERE tutor= ? ";
$req = $db->prepare($updateLastchange);
if($req->execute(array($_SESSION['toHelp'], $date, $_SESSION['email'])))
{
    //some code that should be executed
}

您还必须知道“lastchange”实际上包含定义了tutor = $_SESSION['email'], $_SESSION['toHelp'] 并且date 只是一个日期(“Y-m-d H:i:s ") 创建得早一点。

问题是执行返回false,我有一个语法错误:

致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[42000]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,以便在 'date = 附近使用正确的语法 '2015-06-10 11:09:53' WHERE 导师 = '导师''

我不明白为什么......

我使用 WAMP(我不知道你是否需要知道)。

感谢您的帮助!

【问题讨论】:

  • 在两列之间加一个逗号?!
  • 是的,这就是问题所在,谢谢!

标签: php mysql session pdo


【解决方案1】:

您在查询中忘记了,

$updateLastchange = "UPDATE lastchange SET student = ?, date = ? WHERE tutor= ? ";

如果你想在你的数据库中存储一个变量,我认为这是可能的(虽然我还没有尝试过):

$variable = '$variableYouWantToStore';

执行此操作时,只需使用单勾 ('),而不是双勾 (")。可以参考here

【讨论】:

  • 谢谢!我觉得有点愚蠢......只有一个问题:是否可以更新名称为变量的表?像“UPDATE ? SET ...”,稍后执行?
  • @Raphallal 如果我的回答对您有所帮助,您可以投票或将我的回答标记为正确答案。我确实更新了关于存储变量名的答案。
  • 我的意思是,我希望我的表名是一个变量...而且我无法将您的答案设置为“已接受”,因为我必须等待 7 分钟。
  • @Raphallal - 是的,您可以查询表名来自变量的位置。 "UPDATE ".$tablename." SET column1 = ? WHERE id = ?"
猜你喜欢
  • 1970-01-01
  • 2018-12-16
  • 2015-07-13
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 2020-09-04
相关资源
最近更新 更多