我是PHP的新手,我正在尝试一些例子。出于某种原因,当我单击表单上的提交时,数据不会插入到我的SQL数据库中。有什么理由不会吗?
<!DOCTYPE HTML>
<?php
$server = 'x';
$user = 'x';
$pass = 'x';
$db = 'x';
try {
$con = new PDO("mysql:host=$server;dbname=$db",$user,$pass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
<html>
<form name="Contact form" input type="text" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
First name: <input type="text" id="firstname" name="firstname"><br />
Last name: <input type="text" id="lastname" name="lastname"><br />
<input type="submit" id="submit" value="Submit this!" name="submit">
</form>
</html>
<?php
if(isset($_POST['submit'])) {
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$q = "INSERT INTO names(fname,lname) VALUES(:firstname,:lastname)";
$query = $con->prepare($q);
$result = $query->execute(array(
":firstname" => $firstname,
":lastname" => $lastname
));
}
$con = null;
?>
答案 0 :(得分:2)
您应始终从数据库连接或准备或执行语句中检查返回状态。这样你就可以获得更多信息失败的原因。您正在从连接中捕获可能的异常,这很好。但我注意到,如果发生连接错误,您的代码只会打印错误消息,然后继续,就像连接成功一样。换句话说,即使您没有有效的连接,也会尝试准备INSERT。您应该停止执行,如果失败,则不要再使用db连接做任何事情。
例如,使用echo
而不是die()
。这会在打印错误时停止脚本。随着您越来越熟练使用PHP,您可以围绕错误添加HTML,因此它看起来更好,并且还提供用户链接转到另一个页面再试一次。
try {
$con = new PDO("mysql:host=$server;dbname=$db",$user,$pass);
}
catch(PDOException $e) {
die($e->getMessage());
}
如果您对表没有特权,或者表不存在,或者您构成错误的SQL语法或任何其他原因,则SQL语句也可能无法准备。如果您提供非法的值,或者如果磁盘已满或者其他原因导致插入失败,则SQL语句也可能在执行时失败。
通常,如果出现问题,返回值为false
。以下是检查它们的示例:
$q = "INSERT INTO names(fname,lname) VALUES(:firstname,:lastname)";
$query = $con->prepare($q);
if ($query === false) {
die(print_r($query->errorInfo()), true));
}
$result = $query->execute(array(
":firstname" => $firstname,
":lastname" => $lastname
));
}
if ($result === false) {
die(print_r($query->errorInfo()), true));
}
如果您收到任何错误,请在mysql手册中查找:http://dev.mysql.com/doc/refman/5.5/en/error-handling.html