준비된 명세서와 함께 데이터베이스에 테이블을 삽입하고 업데이트하는 데 문제가 있습니다.
문제
PHP5에 매우 새롭고 여전히 몇 가지 문제가 있습니다. 준비한 문으로 선택하는 방법을 알아 냈습니다.
function input_lab_results($name, $image, $descrip) {
$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";
if($stmt = $this->conn->prepare($query)){
$stmt->bind_param('sssiidd', $name, $image, $descrip, 0, 0, date("Ymd"), date("Ymd"));
$stmt->execute();
die();
} else{
die($this->conn->error);
}
}
내가 얻는 오류는
치명적인 오류 : 43 행에 참조 html/classe/mysql.php에 따라 매개 변수 4를 전달할 수 없습니다.
모든 도움/참조에 감사드립니다. 고맙습니다.
모두가 PDO를 사용하는 것을 언급하고 있습니다. 여러분은 좋은 튜토리얼이나 이것에 대한 예를 가지고 있습니까?
해결책 2
나는 그것을 변경했다
function input_lab_results($name, $image, $descrip) {
$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";
if($stmt = $this->conn->prepare($query)){
$stmt->bind_param('sssdd', $name, $image, $descrip, date("Ymd"), date("Ymd"));
$stmt->execute();
die();
} else{
die($this->conn->error);
}
}
기본적으로 나는 그것이 읽고있는 곳으로 바뀌 었습니까 ?? 쿼리에서 정수가 0으로 묶이지 않았습니다.
다른 팁
그렇지 않습니다 $descrip
그게 바로 문제 야; 0s입니다 (매개 변수 4 & 5). 해결책은 정수보다는 변수를 전달하는 것입니다.
`$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";`
$pat_doctor = 0;
$pat_resident = 0;
if($stmt = $this->conn->prepare($query)){
$stmt->bind_param('sssiidd', $name, $image, $descrip, $pat_doctor, $pat_resident, date("Ymd"), date("Ymd"));`
분명히 MySQLI_BIND_PARAM은 인수를 참고 문헌으로 원하므로 값을 복사하지 않고 메모리에 저장된 위치를 찾습니다. 이 이미지와 같은 SQL 문에 바인딩하고 싶은 것들 중 일부는 아마도 과도한 사본을 가지고 있지 않을 정도로 충분히 클 것입니다. 리터럴, 문자열 또는 기타는 참조로 액세스 할 수 없습니다. 보다: http://us.php.net/references
나는 0을 SQL 문으로 하드 코딩하는 것을 제안하지 않습니다.
그건 그렇고 PDO를 제안하겠습니다. 구문은 훨씬 더 넓습니다.
사용하지 마십시오 bind_param
-직관적이지 않은 오류가 발생하기 쉬운 인터페이스로, 대부분 기본 C-API의 유산입니다. 사용 bind_value
또는 더 나은 - 인수로 값 배열을 전달합니다. PDOStatement->execute
. 예를 들어 :
$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";
if ($stmt = $this->conn->prepare($query)) {
$stmt->execute(array($name, $image, $descrip, date("Ymd"), date("Ymd")));
die();
} else {
die($this->conn->error);
}