为什么这个PHP脚本不会在MySQL数据库中插入表单数据?

时间:2012-03-09 16:55:56

标签: php mysql

在表单提交上,我收到一个没有错误且没有成功消息的空白页面(insert.php)。

这是表格:

<form action="insert.php" method="post">
Firstname: <input type="text" name="first_name" id="first_name" />
Lastname: <input type="text" name="lastname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

这是脚本:     

mysql_select_db("my_db", $con);


$stmt = $db->prepare('INSERT INTO my_table (first_name) VALUES (:first_name)');

$stmt->execute(':first_name', $first_name);


if (!mysql_query($stmt,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>

2 个答案:

答案 0 :(得分:3)

您尝试同时使用2个不同的MySQL接口。 mysql_*系列函数使用ext/mysql扩展名... prepared statement内容为PDO。你需要选择其中一个。因为PDO真的是生病的方式,为你举一个例子:

$db = new PDO($dsn, $user, $password);

try {
   $stmt = $db->prepare('INSERT INTO my_table (first_name) VALUES (:first_name)');
   if($stmt->execute(array(':first_name' => $first_name))) {
      echo "1 record added";
   }

} catch (PDOException $e) {
  die('Error: ' . $e->getMessage());

}

可以找到Mysql DSN上的文档(PDO constructor的第一个参数){。{3}}。

答案 1 :(得分:2)

您需要创建一个PDO对象才能使用预准备语句。相反,您已打开与mysql_connect()的连接。两者不混合,PDO在它们之间是优选的,因为它通过使用准备好的陈述(以及其他原因)更容易保护。

来自the PDO docs:

// This establishes your connection using PDO.
// The PDO connection object is $db

/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

将关联数组传递给execute(),而不是代表占位符的参数列表。

// Now that the PDO object is successfully created, prepare your statement
$stmt = $db->prepare('INSERT INTO my_table (first_name) VALUES (:first_name)');

// Arg to execute() should be an associative array
$stmt->execute(array(':first_name' => $first_name));

以下对mysql_query()的调用是不必要的,因为您已经使用PDO执行了预准备语句。

// Don't do this
// mysql_select_db("my_db", $con);

// Or this...
//if (!mysql_query($stmt,$con))
//{
//  die('Error: ' . mysql_error());
//}

// Or this...
// mysql_close($con)