php - SQL 查询没有被执行

标签 php mysql sql insert

我正在尝试用 PHP 制作一个非常基本的评论系统。 问题是当我提交表单时,新行没有插入到我的 MySQL 表中。 这是我的代码(有人可以检查出什么问题了吗?):

<?php
$act = $_POST['act'];
if($act == 1) {
    $m = $_POST['message'];
    $m = strip_tags($m);
    $message = mysql_real_escape_string($m);
    $name = "Anonymous"; //Static username for demonstration purposes
    $date = "2012-7-28"; //Static date for demonstration purposes

    $con = mysql_connect("localhost","username","password");
    if (!$con){die('Could not connect: ' . mysql_error());}

    mysql_query("INSERT INTO comments (name, message, date) VALUES ('$name', '$message', '$date')");
    mysql_close($con);
}
?>

<form action="comments.php" method="post"> 
    <input type="text" name="message">
    <input type="hidden" name="act" value="1">
    <input type="submit" name="submit" value="Submit">
</form>

最佳答案

我认为您的问题在于转义,或者更确切地说是列名的“非转义”。您知道“日期”是 mySQL 中的函数名称吗?

尝试将所有表名和列名放在反引号中。

mysql_query("INSERT INTO `comments` (`name`, `message`, `date`) VALUES ('$name', '$message', '$date')");

此外,为了进一步引用,发布错误消息永远不会伤害寻找答案。 除此之外,我找不到您的查询有任何特别错误的地方。

编辑:呸!我错过了一些明显的东西。 请执行 'mysql_select_db('name_of_database');在查询之前。 否则它不知道去哪里寻找您指定的表。

为了完整起见(正如 Michael Besteck 所指出的),只有在建立连接后才需要执行“mysql_real_escape_string”。

也就是说,因为 'escape_string' 依赖于连接的编码来确定哪些字符需要转义以及如何转义。

关于php - SQL 查询没有被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702004/

相关文章:

PHP:从 MySQL 数据库检索多行

php - 渴望加载在一对多关系上返回 null

MYSQL SubQuery vs Join - 两者都不适合我

php - 第一个词仅出现在表单文本框中

javascript - 在 WooCommerce 产品页面中添加千位分隔符和总价

MySQL在按条件按多列分组时选择行

MySql If 没有第二个结果

php - 如何按 user_id 分组并按 desc 排序

sql - 如何在db2 sql中转义撇号

c# - C# 中的 Sql Parser 用于语法检查 Oracle 语句