2013-07-09 2 views
1

최근 주제에서 PDO에 대해 배웠습니다. 나는 그것을 이해하기 위해 최선을 다하고 노력하고 있습니다. 하지만 문제는 데이터베이스에 paus 스크립트를 삽입하고 업데이트하지 않는다는 것입니다. 이제 저는 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' 호출 중에 값을 그 placeholder에 바인딩 할 것입니다 :'execute (array ('name'=> $ name, 'Overalln'=> $ Overalln, 'Overall1'=> $ Overall [1], 'Overall2'=> $ Overall2))'입니다. – tadman

+0

@ tadman 귀하의 코멘트 주셔서 감사합니다! 하지만 "실행"이란 무엇을 의미합니까? U 코드를 게시 할 수 있습니까? – 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

참고로, 초보자 용으로는 imho가 코드를 읽고 디버그하기 쉽게 만드는'bindValue'에 대한 언급을 추가 할 것입니다.일단 그렇게하면, 내 +1 –

+0

을 갖게 될 것입니다. 또한, 많은 문자열을 하나의 문자열로 연결하는 대신 단일 문자열로 쿼리를 작성합니다. –

+0

문자열을 구성하는 것이 선호되는 문제이므로 @ Kev30의 내용을 그대로 보존했습니다. 명명 된 인수를 사용하여 실행하는 것은 나쁘지 않습니다. 여기서 무슨 일이 일어나는지 분명해야합니다. 'bindValue'는 꽤 장황한 경향이 있으며 명확성을 높이 지 못합니다. – tadman