查询没有发送到数据库
尴尬的问题在这里,因为它显然是如此简单的事情出错了。 (对于任何声称'重复'的人,我已经花了3个小时在这里查找相关问题并将许多答案付诸实践,但无济于事,因此需要这个问题。)查询没有发送到数据库
我在使用PHP和MySQL制作用户注册表单的过程中,一切都很好,但是,我没有看到数据库中的值?所以显然它不提交罚款。
问题
为什么不将它提交?
我已经做了var_dump($ _ POST);其结果是:
array(4) { ["name"]=> string(14) "Foo Bar" ["email"]=> string(18) "[email protected]" ["password"]=> string(8) "foobar123" ["submit"]=> string(8) "Register" }
我也做了print_r($ query);在查询什么是通过,结果是:
INSERT INTO user_info (name, email, password) VALUES ('Foo Bar', '[email protected]', '$2y$10$36UQIGc6OwFrNs/TBfc6letRlrrdRGGoj.lh65puJElDJER08ozQe')
表user_info已存在,我的连接到数据库是好的。 我试过对列名使用后向逗号,我也试过不使用逗号作为值,但似乎没有提交。
下面的代码:
HTML -
<form method="post" name="register-form" action="database.php">
Name: <input type="text" name="name"><br>
Email: <input type="email" name="email"><br>
Password: <input type="password" name="password">
<input type="submit" name="submit" value="Register" />
</form>
PHP -
<?php
require 'dbconnect.php';
function registerUser() {
$username = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_BCRYPT);
$mysqli = mysqli_init();
$query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')";
$mysqli->query($con, $query); //$con referenced in dbconnect to connect to db
var_dump($_POST);
print_r($query);
}
if(isset($_POST['submit']) === TRUE){
registerUser();
}
?>
dbconnect.php
<?php
$dbserver = 'localhost';
$dbusername = 'foo';
$dbpassword = 'bar';
$dbdatabase = 'usersdb';
$con = mysqli_connect($dbserver, $dbusername, $dbpassword, $dbdatabase);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
我开始认为这可能是权限相关但它在我的本地主机上使用XAMPP所以它肯定不会是?任何帮助将不胜感激!谢谢。
在函数registerUser中没有定义$con
。 创建一个连接,您的数据将被插入。
function registerUser($con) {
$username = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_BCRYPT);
$mysqli = mysqli_init();
$query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')";
$mysqli->query($con, $query); //$con referenced in dbconnect to connect to db
var_dump($_POST);
print_r($query);
}
阅读代码中的评论$ con是在dbconnect .php – 2014-08-30 11:23:39
为什么downvote请解释 – 2014-08-30 11:23:48
您必须在downvoting之前知道变量范围。为了使用dbconnect.php中的$ con,您必须使用全局变量 – 2014-08-30 11:24:58
的问题就在这里:
$mysqli = mysqli_init();
$query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')";
$mysqli->query($con, $query); //$con referenced in dbconnect to connect to db
您需要mysqli_init
后建立使用mysqli_real_connect
连接或使用构造new mysqli()
,而不是这两个的。另外$mysqli->query
使用$mysqli
对象,并且只接受一个参数,即查询。如果您在其他地方指定了连接,则需要使用mysqli_query
。见http://php.net/manual/de/mysqli.query.php
这是解决方案:
在DBCONNECT。php这条线充分利用
$ con = mysqli_connect($ dbserver,$ dbusername,$ dbpassword,$ dbdatabase);
与
$的mysqli =新的mysqli($ DBSERVER,$数据库用户名,$ DBPASSWORD,$ dbdatabase);
和reaplace database.php中的与该内容:
需要 'dbconnect.php';
$username = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_BCRYPT);
如果(isset($ _ POST [ '提交'])=== TRUE){// $ mysqli的= mysqli_init(); $ query =“INSERT INTO user_info(name,email,password)VALUES('$ username','$ email','$ hash')”; $ mysqli-> query($ query); //在DBCONNECT引用$ CON连接到数据库
var_dump($_POST);
print_r($query);
}
这应该工作
警告:mysqli :: query():第30行的无效对象或资源mysqli - 第30行是$ mysqli-> query($ query); // $ db在dbconnect中引用以连接到db – 2014-08-30 12:46:44
需要'dbconnect.php'; $ username = $ _POST ['name']; $ email = $ _POST ['email']; $ password = $ _POST ['password']; $ hash = password_hash($ password,PASSWORD_BCRYPT);如果(isset($ _ POST ['submit'])=== TRUE){ $ query =“INSERT INTO user_info(name,email,password)VALUES('$ username','$ email','$散列')“; $ mysqli-> query($ query); var_dump($ _ POST); print_r($ query); } – 2014-08-30 12:52:35
请尝试此代码,并跳过后; – 2014-08-30 12:56:53
使用'mysql_real_escape_string'不成为SQL注入的目标。 – 2014-08-30 11:17:28
您可以从Workbench运行相同的查询(使用相同的登录凭据)吗? – thebjorn 2014-08-30 11:18:25
@KeVin我知道这会弹出,我忘记提及的问题,我最初确实有mysql_real_escape_string,但我拿出来,所以我可以使其尽可能基本 – 2014-08-30 11:18:43