2013-07-09 2 views
1

Итак, после моей недавней темы я узнал о PDO. Я стараюсь изо всех сил понять это, и это работает. Но теперь проблема в том, что мой новый скрипт pdo не будет вставлять и обновлять, если он существует в базе данных. Теперь я спрашиваю об этом здесь, потому что я стартер в PDO, и я стараюсь изо всех сил.Вставка и обновление PDO

Теперь это код, который я использую.

$db->prepare(
'INSERT INTO track (`rsname`, `overallranknow`, `overalllevelnow`, `overallxpnow`)' . 
'VALUES (' .$name. '. ' .$Overalln. ', ' .$Overall[1]. ', ' .$Overall2. ') '. 
'ON DUPLICATE KEY UPDATE ' . 
    "rsname = ' .$name. '" . 
    "overallranknow = ' .$Overalln. ' " . 
    "overalllevelnow = ' .$Overall[1].' " . 
    "overallxpnow = ' .$Overall2. ' " 
); 

код, как ничего не делать прямо сейчас

-это не вставляя в базу данных.

-it не обновляется в базе данных.

Кроме того, моя база данных подключения файла это

<?php 
$config['db'] = array(

'host'   => 'localhost', 
'username'  => '', 
'password'  => '', 
'dbname'  => '' 
); 

$db = new PDO('mysql:host=' . $config['db'] ['host'] . ';dbname=' . $config['db'] ['dbname'], $config['db'] ['username'], $config['db'] ['password']); 

Может быть, я отправляю чепчик вопрос здесь и я знаю, но я хочу, чтобы узнать его.

~ Кев (плохой английский = извините)

+0

Это здорово, что вы используете PDO, но вы не можете ** ** написать SQL-код таким образом, не внося серьезные [ошибки инъекций SQL] (http://bobby-tables.com/). Ваш запрос должен выглядеть так: «INSERT INTO track (...) VALUES (: name,: Overalln,: Overall1, Overall2) ...», а затем вы связываете значения с этими заполнителями во время вызова 'execute':' execute (array ('name' => $ name, 'Overalln' => $ Overalln, 'Overall1' => $ Общий [1], 'Overall2' => $ Overall2)) '. – tadman

+0

@tadman Спасибо за ваш комментарий! Но что значит «выполнить»? может у вас, возможно, поместить его в код, который я разместил? – Kev30

+0

Также мне нравится обновлять таблицу, если она существует, это возможно? – Kev30

ответ

0

Готовое заявление должно быть выполнено для того, чтобы на самом деле попал в базу данных.

Вы должны настроить его, чтобы выглядеть следующим образом:

$sth = $db->prepare(
    'INSERT INTO track (`rsname`, `overallranknow`, `overalllevelnow`, `overallxpnow`)' . 
    'VALUES (:name, :Overalln, :Overall1, :Overall2) '. 
    'ON DUPLICATE KEY UPDATE ' . 
    "rsname = :name" . 
    "overallranknow = :Overalln" . 
    "overalllevelnow = :Overall1" . 
    "overallxpnow = :Overall2" 
); 

$sth->execute(array('name' => $name, 'Overalln' => $Overalln, 'Overall1' => $Overall[1], 'Overall2' => $Overall[2])); 
+0

Это работает, но для справки и для начинающих пользователей я бы добавил упоминание о 'bindValue', которое imho упрощает чтение и отладку кода.Как только вы это сделаете, у вас будет мой +1 –

+0

. Кроме того, я бы написал запрос как одну строку, а не конкатенацию многих строк. –

+0

Построение струны является вопросом предпочтения, поэтому я только что сохранил то, что @ Kev30 было там. Выполнить с именованными аргументами неплохо, здесь должно быть довольно ясно, что происходит. 'bindValue' имеет тенденцию быть довольно многословным и не добавляет много на пути ясности. – tadman

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