2014-09-20 2 views
1

Я пытаюсь сделать простую функцию для массива insert в моей базе данных с 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 или с ошибкой п.д.о. ...

Кто-то знает, что я делаю не так?

благодаря

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

Какова фактическая строка SQL, передаваемая 'prepare'? –

+0

PDO по умолчанию ошибочно отключится. Задайте свой объект '$ bdd' для исключения исключений в' database.php' после подключения: '$ bdd-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);' –

+0

'... VALUES (" '. $ keyVal. '")');' Вам не хватает '' '(кавычки) вокруг значений –

ответ

0

Я, наконец, найти решение, первый я сделать var_dump из ERRCODE (не знаю эту функцию перед SRY)

var_dump($req->errorCode()); 

он возвращался код ошибки: 42S02

Таким образом, для исправления, простое решение просто добавить:

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

Спасибо за вашу помощь

+0

Какова была строка с сообщением об ошибке? –

-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

+0

У меня такая же проблема с этим запросом. О SQL-инъекции я считаю, что это безопасно, я использую «:» для привязки значения с помощью массива ($ array) –

+0

Хорошие парни: P Спасибо , не думал .. –

Смежные вопросы