【问题标题】:PHP/MySQLi form SQL Syntax Error - Suggestions, Answers, or Advice on why it's not working?PHP/MySQLi 形式的 SQL 语法错误 - 关于为什么它不起作用的建议、答案或建议?
【发布时间】:2016-02-18 11:21:48
【问题描述】:

我已经看到这个问题被问了很多次,并且我尝试了不同的解决方案,但没有任何运气,所以这里是:我正在创建一个存储用户名和密码的表单,目前无需验证(用于测试和学习)。我正在使用 var_dump($_POST);所以我可以看到值是从 html 表单输入的。我不确定我做错了什么,并感谢任何建议、答案和建议。提前致谢!

array(2) { ["username"]=> string(5) "rafel" ["password"]=> string(6) "rafael" }

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''username', 'password') VALUES ('rafel', 'rafael')' 附近使用正确的语法

我的php如下:

<?php 
var_dump($_POST); 
$server_name = "*******";
$admin_name = "********";
$root_password = "********";
$database_name = "myDBPDO";
$table_name = "myguests";
$connect = mysql_connect($server_name, $admin_name, $root_password); 

if (!'connect') {die('Connection Failed: ' . mysql_error());} 

mysql_select_db($database_name, $connect); 

if(isset($_POST['username'])) 
$username = mysql_real_escape_string($_POST['username']);
if(empty($username)) $username = 'heybardly'; 

if(isset($_POST['password'])) 
$password = mysql_real_escape_string($_POST['password']);
if(empty($password)) $password = 'monochrome1724';

$user_info = "INSERT INTO table_name ('username', 'password') VALUES ('$username', '$password')"; 
if (!mysql_query($user_info, $connect)) {die('Error: ' . mysql_error());}

echo "Your information was added to the database.";
echo "New record has id: " . mysqli_insert_id($connect);
mysql_close($connect);
?>

我的 HTML 表单:

<!DOCTYPE html>
<html>
<head>
<title>Cinnamon RP</title>
<link rel="stylesheet" type="text/css" href="mainstylesheet.css">
</head> 
<body> 
<form action="form.php" method="post">
Username:<input type="text" name="username">
Email:<input type="text" name="password">
Submit<input type="submit" value="Submit"/>
</form>
</body>
</html>

【问题讨论】:

  • echo this query "INSERT INTO table_name ('username', 'password') VALUES ('$username', '$password')" 然后复制这个查询并在 phpmyadmin 中尝试检查发生了什么错了......你得到了完美的解决方案
  • 注意:如果你还在学习,请不要使用mysql_*()函数学习。它们已被弃用,并将在未来的 PHP 版本中删除。如果您正在学习,请从 mysqli_* 或 PDO 开始,并以正确的方式进行。
  • ......即使你不是 - 但我想我们都还在学习

标签: php html mysql forms syntax


【解决方案1】:

您必须在 column and table name 中使用 backtick 而不是 quotes

 $user_info = "INSERT INTO `table_name` (`username`, `password`) VALUES ('".$username."', '".$password."')";

注意:- 不推荐使用 mysql,而是使用 mysqli 或 pdo

不要将普通密码存储到数据库中

查看http://php.net/manual/en/faq.passwords.php

http://php.net/manual/en/function.password-hash.php

【讨论】:

  • 非常感谢。您的建议奏效了,我能够输入数据,这正是我想要的这个表单,不会使用实际值,尽管我将创建一个真实的表单,所以你对 PDO 和密码散列的建议非常重要赞赏!
【解决方案2】:

使用反引号而不是单引号。这应该是

$user_info = "INSERT INTO table_name (`username`, `password`) VALUES ('$username', '$password')";
                                      ^        ^  ^        ^

【讨论】:

    【解决方案3】:

    删除列名中的引号。

    关于未来编码的建议...开始使用 PDO 或 Mysqli,因为不推荐使用 mysql。

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多