数据不会提交到SQL数据库

时间:2012-11-18 01:19:22

标签: php sql pdo

我是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;
?>

1 个答案:

答案 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