PHPMyAdmin数据库使用0而不是字符串填充字段


PHPMyAdmin database fills fields with 0 instead strings

我正在尝试使用PHP和PHPMyAdmin为一个网站创建一个注册页面。我在表格中设置了注册所需的2个字段:电子邮件和密码,并带有密码确认。

在PHP中,它们都被视为字符串,在数据库中则被视为varchar。我不知道为什么,但每次用户插入电子邮件和密码并确认时,新用户都会被插入数据库,但电子邮件和密码的实际值为0。我确信PHP变量中的电子邮件和密码值是正确的,因为我打印是为了在mysqli查询之前立即输出它们的内容,所以我认为这是数据库问题。

我目前正在使用Wamp Server for Windows 8和PHPMyAdmin 4.1.14。数据库类型为InnoDB,具有latin_swidish_ci字符。PHP中使用的查询是:

"INSERT INTO users (email,password) VALUES (email = '$email', password = '$password')"

使用mysqli_query执行。

不执行column equals variable,而是执行:

VALUES ('$email','$password')

如果CCD_ 2确实是您想要使用的。

语法VALUES (email = '$email', password = '$password')用于检查列是否等于某个值,例如使用WHERE子句时。

WHERE email = '$email'

WHERE email = '$email' AND password = '$password'

当进行UPDATE时,例如

UPDATE table_name SET email = '$email', password = '$password'  
WHERE column_x='something'

或者,当进行SELECT时,作为另一个示例:

SELECT * FROM table_name  
WHERE column_x = 'something' OR column_y = 'something else'
  • 旁注:OR可以替换为AND,具体取决于所需的查询

然而,当您修复它时,当前方法对SQL注入是开放的。使用准备好的语句,或将PDO与准备好的声明一起使用它们更安全

  • 看看这些,你会很高兴的

防止SQL注入的一个基本示例是:

$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);

错误检查旁注:

错误报告添加到文件顶部,这将有助于生产测试。

error_reporting(E_ALL);
ini_set('display_errors', 1);

以及CCD_ 11到CCD_ 12,同时用您的DB连接变量替换CCD_。

Matteo-此外,您应该考虑参数化php语法以防止SQL注入。现在做总比以后再做要好。你可以在这里找到对这些概念的解释;https://stackoverflow.com/questions/25316766/understanding-parameterized-queries-and-their-usage-in-preventing-sql-injections

INSERT INTO users (email,password) VALUES ('$email', '$password')

您不需要在VALUES之后使用列名。您已经在表名称后面指定了它。

顺便说一下,您可能想看看php准备的语句

相关文章: