PHP / MYSQL插入无能为力

时间:2019-02-27 19:32:20

标签: php mysql

我有一个用HTML设置的简单表单,可将​​值传递给PHP并将其放在MYSQL数据库中。我只是无法理解为什么单击“提交”按钮后什么也没有发生。以前它说“失败”,但现在什么也没有。我已经检查了表格中的值-很好。我检查了数据库连接-很好。我已经检查了SQL语句-好吧,我看不到任何错误。

这是我的主要HTML页面

<p class="subtitle">Let me know what you think</p>
<form action="db_insert.php">
<input name="username" placeholder="Name">
<br>
<textarea name="comments" placeholder="Please type your comments here" 
cols=120 rows=5></textarea>
<br>
<input type="button" name="submit" value="submit">
<br>
<p id="commTitle">Comments</p>
<br>
<p id="comment"></p>

这是PHP

<?php
include 'db_connection.php';

//create database connection 
$conn = OpenCon();
$username = htmlspecialchars($_POST['username']);
$comment = htmlspecialchars($_POST['comment']);

$sql = 'INSERT INTO sitecomments(username, comment) VALUES(:username,:comment)';
$stmt = $conn -> prepare($sql);
$stmt -> bindValue(':username', $username);
$stmt -> bindValue(':comment', $comment);
$q_result = $stmt -> execute();

if($q_result){
echo 'Comment Inserted Successfully';
}
else{
echo 'Failed';
}

db_connection.php如下所示(已删除凭据。

<?php

function OpenCon(){
    //pass the database details to variables
    $host = "localhost";
    $dbuser = "*****";
    $dbpass = "*****";
    $dbname = "*****";
    // combine host and db name in to single variable
    $dbhost = "mysql:host=$host;dbname=$dbname";
    //create PDO from database information
    $dbconn = new PDO($dbhost, $dbuser, $dbpass);
    return $dbconn;
}
?>

正如我所说,我已经检查了数据库连接,一切都很好,那么我到底在哪里出错呢?我的数据库有3个字段,但一个字段是自动递增的,因此我没有在查询中包括它。我在MyPHPAdmin中尝试了查询,并通过了ok。

2 个答案:

答案 0 :(得分:1)

我注意到的第一件事是输入的名称为“ comments”,而不是您正在访问的$ _POST变量,即注释:

<textarea name="comments" placeholder="Please type your comments here" cols=120 rows=5></textarea>

$comment = htmlspecialchars($_POST['comment']);

尝试进行更改,看看是否可以解决问题。

答案 1 :(得分:0)

在代码中处理错误将很有帮助。在当前示例中,如果出现问题,您将很难找出问题所在。

您可以在PDO error handlingPDO::errorInfo的PHP文档中尝试以下所有示例:


确认您的连接有效:

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

确认您的SQL有效

/* Provoke an error -- bogus SQL syntax */
$stmt = $dbh->prepare('bogus sql');
if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($dbh->errorInfo());
}   

通常,错误是pebcak错误,您需要利用适当的调试工具来找出错误的位置。祝你好运!