mysqli 준비 진술서 - 거짓을 반환하지만 왜 그런가?
-
10-07-2019 - |
문제
해당 열에 삽입 할 열 이름과 값의 연관 배열과 테이블 이름 (간단한 문자열)을 기반으로 준비된 삽입 문을 생성하는 함수가 있습니다.
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-> 준비 (클래스의 일부입니다. Conn은 새로운 MySQLI 객체이며 문제없이 작동합니다)는 거짓을 반환하지만 이유를주지는 않습니다!
다음은 준비 진술을 위해 구축 된 샘플 $ SQLString입니다.
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
이 매개 변수화 된 문에 문제가있는 사람이 있습니까? 준비 함수가 False를 반환 할 이유가 있습니까?
해결책
나는 솔루션을이 답변에 복사하여 이것이 퓨어 트로 주어질 수 있습니다. 그렇지 않으면 질문은 "답이없는 질문"에 영원히 나타납니다. 이 답변을 표시하고 있으므로 포인트가 없습니다.
@andrew E. 말한다 :
방금 켜졌습니다
mysqli_report(MYSQLI_REPORT_ALL)
무슨 일이 일어나고 있는지 더 잘 이해하려면 - 내 필드 이름 중 하나가 틀렸다는 것이 밝혀졌습니다. - 당신은 그렇게 생각할 것입니다prepare()
예외를 던지지 만 조용히 실패합니다.
제휴하지 않습니다 StackOverflow