내가 열 이름 및 값의 결합 배열에 기초하여 준비된 INSERT 명령문을 생성하는 기능은 그 열 및 테이블 이름 (단순한 문자열)에 삽입 될 수있다 :Mysqli Prepare Statement - False로 되 돌리는 이유는 무엇입니까?
는function insert ($param, $table) {
$sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
if ($statement = $this->conn->prepare($sqlString)):
$parameters = array_merge(array($this->bindParams($param), $param));
call_user_func_array(array($statement, 'bind_param', $parameters));
if (!$statement->execute()):
die('Error! '.$statement->error());
endif;
$statement->close();
return true;
else:
die("Could Not Run Statement");
endif;
}
내 문제는 $이며 this-> conn-> prepare (클래스의 일부이고, conn는 아무 문제없이 작동하는 새로운 mysqli 객체이다.)는 false를 반환하지만 나에게 이유를주지 않는다!
이INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
사람이 매개 변수가 문에 문제가 있음을 볼 수 있습니다 여기에
는 준비 문 내장됩니다 샘플 $의 sqlString입니까? 준비 함수가 false를 반환하는 이유는 무엇입니까?
오류 메시지가 표시됩니다 (준비가 잘못된 경우 http://php.net/manual/en/mysqli.error.php 참조). 그렇다면 무엇입니까? –
올바른 SQL을 가지고 있는지 확인하기 위해 데이터베이스에서 실제 INSERT 문을 실행 해 보았습니까? – DOK
나는 mysqli_report (MYSQLI_REPORT_ALL)를 켜서 무슨 일이 일어나고 있는지 더 잘 이해할 수 있었다. 필드 이름 중 하나가 틀렸다는 것을 알게되었다. prepare()는 예외를 던질 것이라고 생각하지만 조용히 실패한다. –