2014-09-20 46 views
1

我想做一個簡單的函數插入數組與我的數據庫與PDO。我的PDO請求有什麼問題?

<?php 
require_once($_SERVER["DOCUMENT_ROOT"] . '/include/config/database.php'); 
/** 
* Database 
*/ 
class Database { 

    function __construct() 
    { 

    } 
    function insertArray($array, $table) 
    { 
     global $bdd; 
     $i = 1; 

     foreach ($array as $key => $currVal) 
     { 
      if ($i == count($array)) 
       $keyVal .= ':'.$key; 
      else 
       $keyVal .= ':'.$key.', '; 
      $i++; 
     } 
     $arrayKeyValue = implode(", ", array_keys($array)); 
     $req = $bdd->prepare('INSERT INTO '.$table.'('.$arrayKeyValue.') VALUES('.$keyVal.')'); 
     $req->execute($array); 
     die('DONE'); 
    } 
} 

?> 

但沒有數據被插入,我沒有任何錯誤的PHP或與PDO錯誤...

有人知道我作出錯誤的?

感謝

PS:對不起,我的英文不好

SQL設置&連接

<?php 
error_reporting(E_ALL); 
$bdd = new PDO('mysql:host=localhost;dbname=csgo', 'csgo', 'password removed', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)); 
?> 

變量的內容:

$array 
array(5) { 
    ["screen_name"]=> 
    string(4) "test" 
    ["avatar_big"]=> 
    string(15) "test_avatar.png" 
    ["avatar_small"]=> 
    string(16) "small_avatar.png" 
    ["steam_id"]=> 
    int(991) 
    ["last_connection"]=> 
    int(156121) 
} 
$keyVal 
string(69) ":screen_name, :avatar_big, :avatar_small, :steam_id, :last_connection" 
$arrayKeyValue 
string(64) "screen_name, avatar_big, avatar_small, steam_id, last_connection" 

SQL請求:

INSERT INTO user(screen_name, avatar_big, avatar_small, steam_id, last_connection) VALUES(:screen_name, :avatar_big, :avatar_small, :steam_id, :last_connection) 
+1

傳遞給'prepare'的實際SQL字符串是什麼? – 2014-09-20 21:01:34

+0

默認情況下,PDO將默認爲錯誤。設置你的'$ bdd'對象在連接後在'database.php'中引發異常:'$ bdd-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);' – 2014-09-20 21:02:48

+0

'... VALUES(「'。$ '')');'你缺少''(引號)的值 – 2014-09-20 21:03:17

回答

0

逃避你的表和列名,我終於找到了解決辦法,第一我讓ERRCODE的的var_dump(不知道SRY之前此功能)

var_dump($req->errorCode()); 

他返回錯誤代碼:42S02

因此,對於修復一個簡單的解決方案只需要添加:

$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

感謝您的幫助

+0

什麼是錯誤信息字符串? – 2014-09-20 22:16:40

-1

試着用`

function insertArray($array, $table) 
{ 
    global $bdd; 
    $i = 1; 

    foreach ($array as $key => $currVal) 
    { 
     if ($i == count($array)) 
      $keyVal .= ':'.$key; 
     else 
      $keyVal .= ':'.$key.', '; 
     $i++; 
    } 
    $arrayKeyValue = "`" . implode("`, `", array_keys($array)) . "`"; 
    $req = $bdd->prepare('INSERT INTO `'.$table.'`('.$arrayKeyValue.') VALUES('.$keyVal.')'); 
    $req->execute($array); 
    die('DONE'); 
} 
+0

那些':'應該生成[命名參數](http://php.net/manual/en/pdo.prepare.php#refsect1-pdo.prepare-examples ),我敢肯定。 – VMai 2014-09-20 21:36:50

+0

我有這個請求相同的問題。關於sql注入我認爲這是安全的,我用「:」綁定值與數組鍵($陣列) – 2014-09-20 21:38:35

+0

好點的傢伙:P謝謝,沒有想到.. – 2014-09-20 21:51:03