2014-09-20 47 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