1

mysqli の準備済みステートメントを作成しようとしていますが、何らかの理由で、少なくとも文字列が 0 (ゼロ) に変換されています。

例:
テーブル

id - int, PK  
name - varchar(45)

コード

if ($stmt = $mysqli->prepare("INSERT INTO test (name) VALUES(?)")){
    $stmt->bind_param('s',$name);
    $name="Test1";
    $stmt->execute();
} else {
    echo "prepare failed";
}

これを実行すると、テーブルに新しく挿入された行の名前が 0 になります。私は何を間違っていますか?これが進行中のサーバーで PDO が使用できないため、PDO を使用できません。

4

1 に答える 1

-2

あなたのコードにはいくつかの間違いがあります:

  • bind_param は PDOStatement に存在しませんが、bindParam は存在します。
  • 名前を使用してパラメーターをバインドする場合は、クエリのパラメーターの前に「:」を付ける必要があります。
  • あなたが使用している場合は?インデックス番号を使用します。
  • これはオプションですが、文字列の場合は PDO::PARAM_STR などの PDO const を使用してパラメーター タイプを渡す必要があります。
  • 最後に、使用後に $name 変数を定義していますが、これは機能しません: 彼女を使用する前に変数を定義する必要があります。

コード

if ($stmt = $mysqli->prepare("INSERT INTO test (name) VALUES(:name)")){
    # defining $name
    $name = "Test1";

    # putting $name to the param :name
    $stmt->bindParam(":name", $name, PDO::PARAM_STR);

    # executing the prepared query.
    $stmt->execute();
} else {
    echo "prepare failed";
}
于 2013-07-08T01:26:25.273 に答える