2016-01-12 5 views
0

У меня есть INSERT здесь с PDO. Это не похоже на работу ...Вставить с PDO

$sql = "INSERT INTO client_cards 
     SET cc_num = ?,  
     cc_cvv = ?, 
     cc_month = ?, 
     cc_year = ?, 
     cfname = ?, 
     clname = ?, 
     caddress = ?, 
     ccity = ?, 
     cstate = ?, 
     ccountry = '212', 
     czip = ?, 
     `default` = ? , 
     client_id = ?"; 

    $query = $db->prepare($sql); 
    $array = array($enc_cc_num, $enc_cc_ccv, $exp_month, $exp_year, $fname, $lname, $address, $city, $state, $zip, $set_default, $client_id); 
    $query->execute(array($array)); 

ли PDO работать только с INSERT INTO таблицы (ключ, ключ, ключ) ЗНАЧЕНИЯ ($ цена, $ цена, $ значение), но не с INSERT INTO таблица SET ключ = $ значение ??

+2

'SET' совместно с' INSERT'? Weird. o_O –

+0

Вы дважды обертываете свои переменные в двухмерный массив – Rizier123

+0

Кто-нибудь еще считает, что это ужасно, что кто-то, кто явно хранит информацию о кредитной карте, в своей базе данных задает такой вопрос? –

ответ

4

Вам необходимо передать метод execute() в виде массива значений. Вместо этого вы даете ему только одно значение; массив:

$array = array($enc_cc_num, $enc_cc_ccv, $exp_month, $exp_year, $fname, $lname, $address, $city, $state, $zip, $set_default, $client_id); 
    $query->execute(array($array)); 

Вам нужно всего лишь:

$array = array($enc_cc_num, $enc_cc_ccv, $exp_month, $exp_year, $fname, $lname, $address, $city, $state, $zip, $set_default, $client_id); 
    $query->execute($array); 
        ^^^^^^ here 

При открытии соединения с базой данных, вы должны сказать PDO бросать исключения, когда что-то идет не так, так что вы можете легко поймать эти ошибки.

Например:

$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); 
    $db = new PDO($dsn, $user, $password, $opt); 
+1

* вы должны указать PDO на выброс исключений * я забыл сказать вашей собаке или кошке, чтобы поймать их, если они вылетают из компьютера;) – Rizier123

+1

@ Rizier123 Интересный вариант, я никогда не пробовал это ;-) – jeroen

+0

@Ben Кстати, если вы не поймаете ваши исключения, php покажет вам полную трассировку исключения и стека по умолчанию. – jeroen

0

Ошибку мы имеем здесь синтаксис вставки запроса в SET используется в UPDATE запрос не INSERT, наш запрос будет выглядеть следующим образом: INSERT INTO

подготовлен заявления в основном работают так:

INSERT INTO table_name (field1, field2,...fieldN) VALUES (value1, value2,...valueN); 
  • Приготовьте: шаблон SQL заявление создается и отправляется в базу данных. Определенные значения остаются неуказанными, называемыми параметрами (помечены как «?»). Пример: INSERT INTO MyGuests ЗНАЧЕНИЯ
  • Мы должны связать значения для запроса, то база данных разбирает, компилирует и выполняет оптимизацию запросов на шаблоне оператора SQL, и сохраняет результат без его выполнения
  • (?,,?) Выполнение: позднее приложение привязывает значения к параметрам, а база данных выполняет инструкцию. Приложение может выполнить инструкцию столько раз, сколько он хочет с различными значениями

Мы можем получить некоторые основные tutorilas более здесь, а http://www.w3schools.com/php/php_mysql_prepared_statements.asp

+0

Неверно, запрос INSERT INTO-SET работает нормально – Ben

+0

согласен Я получил это неправильно –