0

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/classes/mySQL.php でパラメーター 4 を渡すことはできません

ヘルプ/リファレンスをいただければ幸いです。ありがとうございました。


誰もが PDO の使用について言及していますが、これに関する優れたチュートリアルや例はありますか?

4

3 に答える 3

1

に変更しました

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にするために、バインドしませんでした。

于 2009-03-17T04:16:10.213 に答える
1

それ$descripは問題ではありません。それは 0 です (パラメーター 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

コードを不必要に混乱させるため、SQLステートメントに0をハードコーディングすることはお勧めしません。

ところで、PDO をお勧めします。その構文ははるかに正気です。

于 2009-03-17T04:31:52.843 に答える