PHPMyAdmin数据库用0代替字符串填充字段

时间:2014-10-13 19:43:33

标签: php mysql sql mysqli

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

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

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

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

使用mysqli_query执行。

3 个答案:

答案 0 :(得分:7)

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

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

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

语法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 injection开放。使用prepared statementsPDO with prepared statements它们更安全

  • 看看那些,你会很高兴的。

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

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

检查旁注错误:

error reporting添加到文件的顶部,这将有助于在生产测试期间。

error_reporting(E_ALL);
ini_set('display_errors', 1);
用数据库连接变量替换or die(mysqli_error($con))

mysqli_query()$con

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

在VALUES之后你不需要列名。您已经在表名后指定了它。

顺便说一下,你可能想看看php prepared statement