2013-06-24 2 views
0

다음은 코드입니다. $ fieldNamesA 및 $ fieldValsA는 POST 변수에서 foreach 루프에서 만들어집니다 여기 PHP mysqli 준비된 삽입 문 실패

$fieldNamesS = implode(',',$fieldNamesA); 
$fieldValsS = implode(',',$fieldValsA); 
$mysqli = new mysqli('localhost', 'user', 'pw', 'db'); 
mysqli_report(MYSQLI_REPORT_ALL); 

$stmt = $mysqli->prepare('INSERT INTO users (?) VALUES (?)'); 
if ($stmt === FALSE) { 
    die ("Mysql Error: " . $mysqli->error); 
} 
$stmt->bind_param('ss', $fieldNamesS,$fieldValsS); 
$stmt->execute(); 
printf("%d Row inserted.\n", $stmt->affected_rows); 

/* close statement and connection */ 
$stmt->close(); 

오류 MSG를 수 있습니다 : 뭔가 잘못에 있다는 것을 불평하는 이유

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?) VALUES (?)' at line 1' in userreg.php:47 
Stack trace: 
#0 userreg.php(47): mysqli->prepare('INSERT INTO use...') 
#1 {main} 
    thrown in /userreg.php on line 47 

이해가 안 내 insert 문. 열/필드 이름을 하드 코드하면 열의 수가 값의 수와 일치하지 않는다는 오류가 발생합니다.이 값은 올바르지 않습니다. 나는 확실히 변수를 var_dumped했고 그들은 같은 수의 매개 변수를 가지고있다.

답변

1

PHP Mysqli로 열 이름에 자리 표시자를 사용할 수 있다고 생각하지 않습니다.

mysqli 클래스를 확장하기 위해 작성한 PHP 클래스에 대한 답변을 확인하십시오. 그것은 당신에게 약간의 시간을 절약 할 것이고 또한 모든 자동 placeholder 바인딩을 수행합니다.

better_mysqli class

+0

나는 열 이름을 하드 코드했는데, 값의 수가 열을 일치시키지 않았다는 오류가 발생했다.이 열은 체크되고 두 번 잘못되었다는 것을 발견하지 못했다. – hornswoggle

+0

각 열에 대해 하나의 자리 표시자가 있는지 확인하고 있습니까 (위의 Chris Hanson의 답변 참조). – Drew

0

VALUES의 왼쪽에있는 필드의 이름을 입력해야합니다. 각 값에 대해 :

INSERT INTO some_table (some, columns) VALUES (?, ?) 

편집

당신은 열 목록에 자리를 가질 수 없습니다. http://php.net/manual/en/mysqli.prepare.php

참조 마커는 SQL 문의 특정 위치에서만 유효합니다. 예제의 경우 WHERE 절의 열과의 비교에서 비교 값을 지정하기 위해 INSERT 문의 VALUES() 목록에 허용됩니다 (행에 대해 열 값 지정).

그러나, 이들은 이름 열이 SELECT 문 반환하거나 이진 연산자 두 피연산자를 지정하는 선택 목록 (예컨대 테이블 또는 열 이름과 같은) 식별자 허용되지 이러한 = 등호로 ...

+0

아, 맞아. 그래서 이걸 닫으려면 열 이름에 자리 표시자를 사용할 수 없습니까? – hornswoggle