0

私はmySQLに関しては初心者であり、PDOに関してはさらに初心者です。簡単な挿入コードを作成しようとしていますが、サーバーエラーが発生し続けます。二度定義することと関係がある気がします$STH。これが私のコードです:

$dsn    = "mysql:host=localhost;dbname=Menu_Items";
$user   = "root";
$pass   = "root";

// Connect to database
try{
    $DBH = new pdo($dsn, $user, $pass);
}
catch(PDOException $e) {
    echo $e->getMessage();
}

// Define user input as $food
$name = $_POST['food'];

$STH->bindParam(':name', $name);

// Insert user input into table
$STH = $DBH->prepare("INSERT INTO foods ( name ) VALUES ( :name )");

$result = $DBH -> query($STH);
if($result){
    echo("<br>Input data is succeed");
}else{
    echo("<br>Input data is fail");
}

このphpコードは、単純なhtmlフォームに接続されています。

<form id="menu_input" name="menu_input" method="post" action="insert.php">
      <table>
        <thead>Enter a new item</thead>
        <tr>
          <th><label for="food">Food</label></th>
          <td><input type="text" name="food" id="food" placeholder="Food Name" required></td>
        </tr>
        <tr>
          <td><input type="submit"></td>
        </tr>
      </table>
 </form>

私は研究を行ってきましたが、それを機能させるのに少し苦労しています。考え?

4

3 に答える 3

3

最初にオブジェクト/インスタンスを作成/取得してから、そのメソッドを使用します。逆ではありません。

// Insert user input into table
$STH = $DBH->prepare("INSERT INTO foods ( name ) VALUES ( :name )");
$STH->bindParam(':name', $name);
$STH->execute();

および(nit-pickingモード:オン)変数は必要ありません$name

// Insert user input into table
$STH = $DBH->prepare("INSERT INTO foods ( name ) VALUES ( :name )");
$STH->bindValue(':name', $_POST['food']);
$STH->execute();

するだろう、そしてそうするだろう

// Insert user input into table
$STH = $DBH->prepare("INSERT INTO foods ( name ) VALUES ( :name )");
$STH->execute(array('name'=>$_POST['food']));
于 2013-02-28T09:45:28.027 に答える
0

名前付きプレースホルダーは、問題とは何の関係もありません。
そして、彼らは「最善の策」ではありません。これは単なるシンタックスシュガーであり、まったく不要なものです。

あなたの問題は名前付きのプレースホルダーではなく、どこからともなく得た構文です。

  1. 使用している機能のマニュアルページを必ずお読みください。query()メソッドはプレースホルダーをサポートしていません。
  2. 質問する前に、必ずタグwikiを読んでください。そこに適切な例があります。

上でリンクしたPDOのStackoverflowタグウィキを読んで、そこからコードを使用してください。接続とクエリ実行の両方。
エラーを確認するには、エラーレポートを設定する必要があります。そうしないと、コードの何が問題になっているのかを知る方法がありません。

于 2013-02-28T09:45:40.780 に答える
0

パラメータではなく値をバインドしているため、bindValueの代わりに使用してください。ステートメントの後にbindParam呼び出す:bindValueprepare

...
$name = $_POST['food'];

// Insert user input into table
$STH = $DBH->prepare("INSERT INTO foods ( name ) VALUES ( :name )");
$STH->bindValue(':name', $name);

$result = $DBH->query($STH);
...
于 2013-02-28T09:46:13.537 に答える