준비된 명세서와 함께 데이터베이스에 테이블을 삽입하고 업데이트하는 데 문제가 있습니다.

StackOverflow https://stackoverflow.com/questions/652960

  •  19-08-2019
  •  | 
  •  

문제

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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top