Php 查询未发送到数据库

Php 查询未发送到数据库,php,mysql,mysqli,Php,Mysql,Mysqli,这是一个令人尴尬的问题,因为很明显,事情很简单,出了问题。 (同样对于那些声称“重复”的人,我在这里花了3个小时查找相关问题,并将大量答案付诸实践,但都没有用,因此有必要提出这个问题。) 我正在使用PHP和MySQL制作一个用户注册表单,一切都很好,但是,我没有看到数据库中的值?所以很明显,这并不好 问题 为什么不提交 我做了一个var_转储($_POST);结果是: array(4) { ["name"]=> string(14) "Foo Bar" ["email"]=> str

这是一个令人尴尬的问题,因为很明显,事情很简单,出了问题。 (同样对于那些声称“重复”的人,我在这里花了3个小时查找相关问题,并将大量答案付诸实践,但都没有用,因此有必要提出这个问题。)

我正在使用PHP和MySQL制作一个用户注册表单,一切都很好,但是,我没有看到数据库中的值?所以很明显,这并不好

问题

为什么不提交

我做了一个var_转储($_POST);结果是:

array(4) { ["name"]=> string(14) "Foo Bar" ["email"]=> string(18) "foob@bar.com" ["password"]=> string(8) "foobar123" ["submit"]=> string(8) "Register" }
我还完成了print\r($query);在查询中查看传递的内容,结果为:

INSERT INTO user_info (name, email, password) VALUES ('Foo Bar', 'foo@bar.com', '$2y$10$36UQIGc6OwFrNs/TBfc6letRlrrdRGGoj.lh65puJElDJER08ozQe')
表用户信息已经存在,我与数据库的连接正常。 我尝试过在列名中使用向后逗号,也尝试过在值中不使用逗号,但似乎没有任何结果

代码如下:

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();
}

?>

在函数寄存器用户中,没有定义
$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);
}
问题在于:

$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\u init
之后使用
mysqli\u real\u connect
建立连接,或者使用构造函数
new mysqli()
而不是这两个。另外,
$mysqli->query
使用
$mysqli
对象,只接受一个参数,即您的查询。如果在其他地方指定了连接,则需要使用
mysqli\u query
。请参见

这是解决方案:

在dbconnect.php文件中,放置此行

$con=mysqli_connect($dbserver、$dbusername、$dbpassword、$dbdatabase)

$mysqli=newmysqli($dbserver、$dbusername、$dbpassword、$dbdatabase)

并用以下内容替换database.php的内容:

需要“dbconnect.php”

$username = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_BCRYPT);
如果(isset($_POST['submit'])==TRUE){ //$mysqli=mysqli_init(); $query=“插入用户信息(名称、电子邮件、密码)值(“$username”、“$email”、“$hash”)”; $mysqli->query($query);//$con在数据库连接中引用以连接到数据库

var_dump($_POST);
print_r($query);
}


这应该可以使用
mysql\u real\u escape\u string
不成为sql注入的目标。你能从Workbench运行相同的查询吗(使用相同的登录凭据)?@KeVin我知道这会弹出,我忘了在问题中提到,我最初确实有mysql\u real\u escape\u字符串,但我把它去掉了,这样我就可以使它尽可能的基本。在代码中读注释,$con在dbconnect.phpy中。在向下投票之前,你必须知道变量的作用域。为了使用dbconnect.php中的$con,您必须使用全局变量反转投票,因为您现在正在建设性地添加。那么您是说如果我在函数中添加dbconnect.php,应该可以吗?因为我已经尝试了这个方法,但数据库中仍然没有显示任何内容(现在也尝试了)。或者另一种方法是将$con作为参数传递给functionWarning:mysqli::query():第30行的无效对象或资源mysqli-第30行是$mysqli->query($query)//$在dbconnect中引用con以连接到dbrequire'dbconnect.php'$用户名=$_POST['name']$email=$_POST['email']$密码=$_POST['password']$哈希=密码\u哈希($password,password\u BCRYPT);如果(isset($\u POST['submit'])==TRUE){$query=“插入到用户信息(名称、电子邮件、密码)值('$username'、'$email'、'$hash')”;$mysqli->query($query);var\u dump($\u POST);print\r($query)}没有错误,但没有插入到DB、var dump和print r中的任何内容都没有输出你做了,我在等你呢?但这对我来说是wokring,您是否在dbconnect.php中重新放置了我告诉您的行?
var_dump($_POST);
print_r($query);