在提交表单时,我得到一个空白页(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)
?>
最佳答案
您需要创建一个PDO对象才能使用准备好的语句。相反,您已打开与mysql_connect()
的连接。两者不要混用,在它们之间最好使用PDO,因为通过使用准备好的语句更容易确保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)
关于php - 为什么这个PHP脚本不能在MySQL数据库中插入表单数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9637952/