7

準備された更新ステートメントをどのように記述しますか?参照:mysqli :: prepare

私は説明されているようにそれを書いてみました:

  if ($stmt = $mysqli->prepare("UPDATE tblFacilityHrs SET title =? description = ? WHERE uid = ?")){
            $stmt->bind_param('sss', $title, $desc, $uid2);

            //Get params
            $title=$_POST['title'];
            $desc=$_POST['description'];
            $uid2=$_GET['uid'];     

$stmt->execute();
            $stmt->close();
    }
    else {
        //Error
        printf("Prep statment failed: %s\n", $mysqli->error);
    }

エラー:

準備ステートメントが失敗しました:SQL構文にエラーがあります。'description =?の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。WHERE uid =? ' 1行目編集された行。

4

3 に答える 3

16

設定された列の間にコンマがありません。

UPDATE tblFacilityHrs SET title = ?, description = ? WHERE uid = ?
                                ^^^^^^

MySQLがエラーを報告するときは、「何かの近くで使用する構文についてマニュアルを確認するなど」 、エラーが発生する場所である「何か」の直前の文字を最も頻繁に調べます。

bind_param()注:入力変数を設定する前ではなく、設定した後に呼び出す必要がある場合があります。MySQLiがそれらをどのように解析し、いつバインドされるかを思い出せませんが、論理的には、最初に設定してからとにかくバインドする方がコードで理にかなっています。

//Get params
$title=$_POST['title'];
$desc=$_POST['description'];
$uid2=$_GET['uid'];   

$stmt->bind_param('sss', $title, $desc, $uid2);
于 2012-05-16T17:16:12.523 に答える
2

おそらくコンマを追加する必要があります:

$stmt = $mysqli->prepare("UPDATE tblFacilityHrs SET title = ?, description = ? WHERE uid = ?"
于 2012-05-16T17:17:30.353 に答える
1

パラメータを変数に割り当てる前に、パラメータをバインドしています。

$title=$_POST['title'];
$desc=$_POST['description'];
$uid2=$_GET['uid']; 

$stmt->bind_param('sss', $title, $desc, $uid2);

編集:スクラッチ、変数を定義する前または後にパラメーターがバインドされているかどうかに違いはないようです(毎日何か新しいことを学びます!)が、Michaelが言ったように、論理的にはそれらを定義することは理にかなっています最初。

于 2012-05-16T17:18:01.023 に答える