2012-06-15 6 views
4

배열 형식의 매개 변수가있는 간단한 MySQL 삽입 쿼리를 사용하려고합니다. 매개 변수의 수가 잘못되었음을 계속 알려줍니다.PDO 오류 : "잘못된 매개 변수 번호 : 매개 변수가 정의되지 않았습니다."

$stmt3 = $link->prepare('INSERT INTO messages VALUES(null, :room, :name, :message, :time, :color)'); 
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color'])); 

이 이
$stmt3 = $link->prepare('INSERT INTO messages VALUES(:null, :room, :name, :message, :time, :color)'); 
$stmt3->execute(array(':null' => null, ':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color'])); 
뿐만 아니라 특별히 널 삽입을 방지하기 위해 열을 선언

: 나는 모든 같은 오류가 발생, 다음을 시도

$stmt3 = $link->prepare('INSERT INTO messages (room, name, message, time, color) VALUES(:room, :name, :message, :time, :color)'); 
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color'])); 

이가 내 처음에는 PDO를 사용했습니다. (저는 보통 mysqli를 사용하지만 현재 공유 호스트에는 mysqlnd 플러그인이 없으므로 prepare()를 사용하지 못합니다. 따라서이 관점의 통찰력은 높이 평가됩니다.

답변

18

처럼 그것을 한 적이 문제는 - 그리고 당신 자신을 걷어 차릴 것입니다 - :color입니다.

execute()을 호출 할 때 해당 마커에 전달할 값의 배열 키 이름은 :color:입니다. 꼬리표 :을 제거하십시오 (어쨌든 이것은 오타라고 생각합니다).

$stmt3->execute(array(
    ':room' => $Clean['room'], 
    ':name' => $Clean['name'], 
    ':message' => $Clean['message'], 
    ':time' => $time, 
    ':color' => $Clean['color'], 
    )); 
+1

OH MY GOD. 나는 나 자신이 싫어. 나는 이것을 1 시간 반 동안 쳐다 보았고 그것을 보지 못했다고 믿을 수 없다 ... – Morgan

+7

그것은 2 분이 걸렸다. 때로는 그냥 신선한 눈이 필요합니다. 우리가 여기있는 이유입니다 .- – DaveRandom

+1

hehehe +1 신선한 눈! Nice catch Dave – Adi

-1

내가 여기 잘못 될 수도 있지만 내가 아는 한이 작업을 수행해야합니다

$stmt3->bindParam(':room', $Clean['room']); 
$stmt3->bindParam(':name', $Clean['name']); 
//and so on 

그러나

개인 선호도 조사 결과, 나는 항상이

$stmt3 = $link->prepare('INSERT INTO messages VALUES(null, ?, ?, ?, ?, ?)'); 
$stmt3->execute(array($Clean['room'], $Clean['name'], $Clean['message'], $time, $Clean['color'])) 
+0

http://www.php.net/manual/en/pdostatement.execute.php에 따르면, 필자가 사용하고있는 배열 방법이이를 수행하는 선택적 방법입니다. – Morgan

+0

두 번째 예제는 mysqli로 어떻게 처리했는지를 보여 주지만, 가독성을 위해이 작업을 정말하고 싶습니다. 지금은 무엇 때문에 오류가 발생했는지 정말 알고 싶습니다. – Morgan

+0

-1이 답변은 관련이 없습니다. –

관련 문제