没有任何错误时,我的查询不会被执行

时间:2014-09-02 14:05:18

标签: php mysql pdo

我有一个登录脚本,我在其中执行查询以记录人们尝试登录我的网站的时间和地点。这段小代码不会返回任何错误,并且标头可以正常工作,但查询由于某种原因不起作用。有谁知道我做错了什么?

if($count==1){

$securityquery = "INSERT INTO security_kk (action,datetime,country,IP,Affected table,comment) VALUES (:action,:datetime,:country,:IP,:Affected_table,:comment)";
$q = $db->prepare($securityquery);
$q->execute(array(':action'=>"Login",
                  ':datetime'=>$datetime,
                  ':country'=>$country,
                  ':IP'=>$_SERVER['REMOTE_ADDR'],
                  ':Affected_table'=>"members",
                  ':comment'=>"Authenticated as ".$myusername));

$_SESSION['username'] = $myusername;
$_SESSION['privileges'] = $row['privileges'];
$_SESSION['email'] = $row['email'];
header("location:index.php");
}

我是PDO的初学者,但因为没有错误。我不知道在哪里看。

3 个答案:

答案 0 :(得分:4)

datetime是MySQL中的数据类型。用刻度线包裹该列标识符。此外,名称中带有空格的列标识符必须用刻度表包装。

$securityquery = "INSERT INTO security_kk (`action`,`datetime`,`country`,`IP`,`Affected table`,`comment`) VALUES (:action,:datetime,:country,:IP,:Affected_table,:meta)";

答案 1 :(得分:2)

您的错误(或可能是其中一个错误)是

之间的区别
:meta     // your query contains this

':comment'=>"Authenticated as ".$myusername;

您的数组没有名为:meta

的占位符的值

使用错误检查功能检查错误并不会造成伤害,而不是让其他人试图找出一个简单的拼写错误。

  

虽然没有任何错误

因为你没有检查它们。

答案 2 :(得分:0)

  1. DateTime是mysql的数据类型。
  2. 检查您的受影响的表列名称 - 列名称中没有空格
  3. 如下使用的最佳方式。

    $securityquery = "INSERT INTO security_kk (action,[datetime],country,IP,Affected table,comment) VALUES (:action,:datetime,:country,:IP,:Affected_table,:meta)";