Php MYSQLi在数据库中插入新行

Php MYSQLi在数据库中插入新行,php,mysqli,Php,Mysqli,我有一个mysqli数据库表,它是这样设置的 id---电子邮件---密码 我想做的是在这里插入一行新信息。这就是我尝试过的: 编辑:这是我连接数据库的方式,将连接保存在全局变量中: global $db; $db = new mysqli( 'localhost', 'username', 'password', 'database' ); if ( $db->connect_errno > 0 ) { die( 'Unable to connect to database ['

我有一个mysqli数据库表,它是这样设置的

id---电子邮件---密码

我想做的是在这里插入一行新信息。这就是我尝试过的:

编辑:这是我连接数据库的方式,将连接保存在全局变量中:

global $db;
$db = new mysqli( 'localhost', 'username', 'password', 'database' );
if ( $db->connect_errno > 0 ) {
die( 'Unable to connect to database [' . $db->connect_error . ']' );
}

这是该函数获取变量的地方:

    if( isset($_POST('password_confirm'))){
      juice_sign_up($_POST['email'], $_POST['password'], $_POST['password_confirm']);
    }

我对使用MYSQL非常陌生,还不完全理解其语法。非常感谢您的帮助。

您不能执行这样的SQL查询

试试这个:

$sql = 'INSERT INTO user VALUES ($email, $hashPassword);';
$db_con = new mysqli($host, $user, $password, $database);
$result = $db_con->query($sql);
您必须“获取”结果才能获得所需的数据,请阅读文档了解如何使用它。:)

试试这个:

function juice_sign_up( $email, $password, $password_confirm )
{
   global $db;
   $emailCheck = mysqli_query($db, 'SELECT email FROM user WHERE email = $email');
   if($emailCheck == 'NULL'){
       $hashPass = password_hash($password);
       mysqli_query($db, INSERT INTO user VALUES ($email, $hashPassword));

}

这里有几件事不对。您不执行select查询(只构建字符串)。insert语句被添加为PHP代码,但这不是执行语句的方式。此外,您至少需要将输入转义到insert语句,或者甚至使用参数绑定

要执行查询,可以使用。它返回一个查询结果对象(对于select查询),或
true
(对于DML语句)。如果出现错误,它将返回
false

我将在以下片段的评论中解决这些问题:

function juice_sign_up( $email, $password, $password_confirm )
{
    global $db;
    // The line below just assigns a string to $emailCheck. You still need to execute the query.
    $emailCheck = 'SELECT email FROM user WHERE email == $email';

    // Try to execute it.
    $queryResult = $db->query($emailCheck);

    // Check if the query succeeded and if a row is found.
    // For select queries an object is returned from which you can fetch the results.
    if ($queryResult !== false && $queryResult->fetch_object() === false)
    {
        $hashPass = password_hash($password);
        // Inserting should be done in a similar way. Build a query, and execute it.
        $email = $db->real_escape_string($email);
        $hashPassword = $db->real_escape_string($hashPassword);
        // Mind the escaping of illegal characters (above) and the quotes (below).
        $statement = "INSERT INTO user VALUES ('$email', '$hashPassword')";

        // Note: you won't get a result object for insert statements.
        $result = $db->query($statement);
        // Check the value of result to see if it worked.

    }
}

您会遇到什么错误?旁注:使用1x equal,而不是2x
WHERE email==$email'
-执行
WHERE email=$email'
但是,
$email
应该用引号括起来,因为它不是整数。这是SQL,不是PHP。将原始SQL放在PHP中没有帮助<代码>插入用户值($email、$hashPassword)致命错误:无法对函数调用的结果使用isset()(您可以改为使用“null!==func()”,因为这是我遇到的错误。您是否尝试过
$emailCheck=“选择来自用户的电子邮件,其中email='$email'而不是@然而,这一行
插入用户值($email,$hashPassword)
am questing.oop不需要连接到数据库,因为它已经在mysqliI write$hashPass=password\u hash($password)的构造函数中了;但是后来你说$hashPassword,这是一个错误吗?无论如何,谢谢你的帮助,这是非常有用的,帮助我更了解MYSQLi。$hashPass vs$hashPassword是一个错误。我的代码基于您在问题中发布的代码片段,但也有两个不同的变量。我没注意到。它确实应该是同一个变量。
function juice_sign_up( $email, $password, $password_confirm )
{
    global $db;
    // The line below just assigns a string to $emailCheck. You still need to execute the query.
    $emailCheck = 'SELECT email FROM user WHERE email == $email';

    // Try to execute it.
    $queryResult = $db->query($emailCheck);

    // Check if the query succeeded and if a row is found.
    // For select queries an object is returned from which you can fetch the results.
    if ($queryResult !== false && $queryResult->fetch_object() === false)
    {
        $hashPass = password_hash($password);
        // Inserting should be done in a similar way. Build a query, and execute it.
        $email = $db->real_escape_string($email);
        $hashPassword = $db->real_escape_string($hashPassword);
        // Mind the escaping of illegal characters (above) and the quotes (below).
        $statement = "INSERT INTO user VALUES ('$email', '$hashPassword')";

        // Note: you won't get a result object for insert statements.
        $result = $db->query($statement);
        // Check the value of result to see if it worked.

    }
}