[英]MySQL query returning weird error
所以我試圖用我自己的mysql類(構建在pdo之上)將一些數據插入到數據庫中但是我發現了一些奇怪的錯誤
(!)致命錯誤:未捕獲PDOException:SQLSTATE [22007]:無效的日期時間格式:1366不正確的整數值:C:\\ wamp64 \\ www \\ LVWeb \\ Core \\ Database \\ database中第1行的'user_id'列的'Google Chrome'第44行的.mysql-pdo.php
(!)PDOException:SQLSTATE [22007]:無效的日期時間格式:1366不正確的整數值:C:\\ wamp64 \\ www \\ LVWeb \\ Core \\ Database \\ database.mysql-pdo第1行第'user_id'列的'Google Chrome'第44行的.php
表結構: http : //prntscr.com/c3pgzi
我的查詢功能:
public function Query($query, $vars = []){
$Statement = $this -> con -> prepare($query);
if(is_array($vars))
foreach($vars AS $key => $val){
if(is_string($val))
$Statement->bindParam($key, $val, PDO::PARAM_STR);
else if(is_integer($val))
$Statement->bindParam($key, $val, PDO::PARAM_INT);
}
return $Statement->execute();
}
我嘗試插入數據的部分:
$a = "INSERT INTO sessions (ses_id, user_id, ip, os, browser) VALUES
(:ses_id, :user_id, :ip, :os, :browser)";
$this->DB->Query($a, [
':ses_id' => $session,
':user_id' => $response['ID'],
':ip' => GetIp(),
':os' => GetOS(),
':browser' => GetBrowser()['name']
]);
所以我測試了每個變量,看看它們是否是正確的類型:
這是一個有趣的問題 - 原因是參數在PDOStatement->bindParam()
被綁定為引用。
即在foreach
循環中,你說如下:“let:ses_id綁定到$ val中的任何內容”,然后在下一次迭代中 - “let:user_id綁定到$ val中的任何內容”,等等。循環的結束所有參數都有效地綁定到同一個東西 - 變量$val
。 這個價值包含什么? PHP分配給它的最后一件事 - $vars[':browser']
。
因此, $Statement->execute()
嘗試插入一條記錄,其中所有字段都等於瀏覽器的名稱。
您需要將foreach
的代碼更改為以下內容: foreach($vars AS $key => $val){ if (is_string($val)) $Statement->bindParam($key, $vars[$key], PDO::PARAM_STR); else if(is_integer($val)) $Statement->bindParam($key, $vars[$key], PDO::PARAM_INT); }
foreach($vars AS $key => $val){ if (is_string($val)) $Statement->bindParam($key, $vars[$key], PDO::PARAM_STR); else if(is_integer($val)) $Statement->bindParam($key, $vars[$key], PDO::PARAM_INT); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.