簡體   English   中英

MySQL查詢返回奇怪的錯誤

[英]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']
]);

所以我測試了每個變量,看看它們是否是正確的類型:

  1. $ session = string
  2. $ response ['ID'] =整數
  3. GetIp()= string
  4. GetOs()= string
  5. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM