【问题标题】:Syntax error on MySQLMySQL 上的语法错误
【发布时间】:2014-12-09 12:16:19
【问题描述】:

我们正在开展一个学校项目。我们正在尝试使用一些简单的 MySQL 将来自单个 HTML 文本表单的数据存储到 MySQL 数据库中。

我的 HTML 如下所示:

<form action="sql/tilmeld-sms.php" method="post">
        <h2>Tilmelding til SMS:</h2>
        <input type="text" name="sms">
        <input type="submit" value="Submit">
        </form>

我们的 SQL 如下所示:

<?php
$connect = mysql_connect(“localhost”, “ODBC”, “”); if (!connect) { die('Connection Failed: ' . mysql_error()); { mysql_select_db(“database_name”, $connect);

$user_info = “INSERT INTO sms (sms) VALUES ('$_POST[sms]')”; if (!mysql_query($user_info, $connect)) { die('Error: ' . mysql_error()); }
echo “Your information was added to the database.”;
mysql_close($connect); 
?>

当我们在本地主机上运行它时,我们在第 4 行得到一个语法错误。这意味着这行代码有问题:

$user_info = “INSERT INTO sms (sms) VALUES ('$_POST[sms]')”; if (!mysql_query($user_info, $connect)) { die('Error: ' . mysql_error

我们知道这是非常简单的 MySQL。但这是我们第一次使用它,也是我们第一次尝试将数据从 HTML 表单存储到 mysql 数据库中。

其他信息:

  • 数据库名称:projekt32
  • 数据库主机:本地主机
  • 用户名:ODBC(我们读到这是本地主机的通用用户名 窗户)
  • 密码:我们读取的本地主机上没有密码
  • 表名:短信

编辑:这是我们得到的错误代码:

Parse error: syntax error, unexpected 'INTO' (T_STRING) in C:\xampp\htdocs\projekt-3-2\sql\tilmeld-sms.php on line 4

EDIT2:这是一个学校项目,MySQL 是该项目的一部分。我们不会不使用它就通过,所以建议我们可以做的除了 MySQL 之外的其他事情是行不通的,但无论如何谢谢!

【问题讨论】:

  • 你真的使用“智能引号”()而不是简单的双引号(")吗?
  • 另外,拜托,拜托,拜托,请停止使用 MySQL 并开始使用 MySQLi 或 PDO 与准备好的语句/绑定变量......你只是在学习,所以不要开始学习坏习惯,但要从一开始就学会正确地做到这一点
  • 这是一个学校项目,MySQL是这个项目的一部分,不使用MySQL我们不能通过。所以我们必须这样做。
  • 学校应该教你正确的编码方式,而不是错误的方式也许你的老师也可以学习正确的编码方式
  • 仅供参考,解析错误是 PHP 错误,不是 MySQL 错误。 PHP 解释器说它无法理解代码,因为它不符合正确的 PHP 语法。正如其他人指出的那样,这是因为 PHP 期望字符串用直双引号 (") 而非弯曲双引号 (") 括起来。

标签: php html mysql database


【解决方案1】:

您使用的是反引号而不是双引号/单引号。

更新:

$connect = mysql_connect('localhost', 'ODBC', '');
if (!connect) {
  die('Connection Failed: ' . mysql_error());
} // ALSO Use } instead of { here.
mysql_select_db('database_name', $connect);

另外,

$user_info = "INSERT INTO sms (sms) VALUES ('".$_POST['sms'] ."')";

【讨论】:

  • 这是正确的答案,除了 OP 使用弯引号,而不是反引号(反引号是 `)。 (抱歉学究了!)
【解决方案2】:

试试这个

<label for="sms">SMS</label>
                    <input id="sms" type="text" name="sms" />

<input type="submit" name="add" id="add" value="Go">




$sms = kontroll_form_data_string($_POST['sms'], 100);

if ( isset( $_POST['add'] ) ) {
                $db = mysql_connect('localhost', 'ODBC', '');
                mysql_select_db("projekt32") or die(mysql_error());

                    $insert = "INSERT INTO sms(sms) VALUES('$sms')";
                    if(mysql_query($insert)) {
                      echo("Done");
                    }
}

【讨论】:

  • 非常感谢,我认为这几乎可以工作。但是当我们尝试添加数据时,我们确实遇到了这个错误: 用户''@'localhost' 拒绝访问数据库'projekt32' 但据我所知,本地主机上没有用户,所以我不知道该怎么做。
  • 你可以尝试为这个表创建用户吗?转到数据库中的这个表,选择权限并添加用户,然后添加这个新用户并传递给$db = mysql_connect('localhost', 'ODBC', '');
  • 我们创建了一个用户并授予该用户所有权限。发生了一些事情,因为当我们尝试添加数据时,我们没有收到任何错误。实际上,当我们提交数据时,我们只得到一个空白站点。但是数据并没有添加到表中,当我们用 PHPmyadmin 打开表时它是空的。
  • $sms = kontroll_form_data_string 是一个新行,尝试更改数据库短信类型VARCHAR(100)
  • 复制并添加此html并添加此$sms行,然后将sms类型更改为varchar(100)
【解决方案3】:

我想,你应该试试“mysql_real_escape_string”,Concrete example of where mysql_real_escape_string fails and Prepared Statements are necessary

$connect = mysql_connect(“localhost”, “ODBC”, “”); if (!connect) { die('Connection Failed: ' . mysql_error()); { mysql_select_db(“database_name”, $connect);

$sms = mysql_real_escape_string($_POST[sms]);

$user_info = “INSERT INTO sms (sms) VALUES ('$sms')”; if (!mysql_query($user_info, $connect)) { die('Error: ' . mysql_error()); }
echo “Your information was added to the database.”;
mysql_close($connect); 

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2011-07-21
    相关资源
    最近更新 更多