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 mode: on) 不需要变量$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 标签 wiki 并使用那里的代码。用于连接和查询执行。
您必须设置错误报告才能查看错误。否则无法知道您的代码有什么问题。

于 2013-02-28T09:45:40.780 回答
0

使用bindValue代替bindParam,因为您是绑定值,而不是参数。bindValue声明后调用prepare

...
$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 回答