Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:Myqli查询中的Myqli查询_Php_Mysql_Mysqli - Fatal编程技术网

PHP:Myqli查询中的Myqli查询

PHP:Myqli查询中的Myqli查询,php,mysql,mysqli,Php,Mysql,Mysqli,我正在尝试为我的作业网站制作一份注册表,它应该检查给定的电子邮件地址是否已经在数据库中,如果没有插入信息,然后返回客户id。如果在数据库中,它应该将客户id返回为“存在”,并设置前端错误消息。问题是它似乎在检查信息是否存在之前插入了信息,因此每个新条目都返回“exists”,而不是用户id。下面是我的PHP代码 <?php $regemail = $_POST['regemail']; $regfirst = $_POST['regfirst']; $reglast = $_POST['r

我正在尝试为我的作业网站制作一份注册表,它应该检查给定的电子邮件地址是否已经在数据库中,如果没有插入信息,然后返回客户id。如果在数据库中,它应该将客户id返回为“存在”,并设置前端错误消息。问题是它似乎在检查信息是否存在之前插入了信息,因此每个新条目都返回“exists”,而不是用户id。下面是我的PHP代码

<?php
$regemail = $_POST['regemail'];
$regfirst = $_POST['regfirst'];
$reglast = $_POST['reglast'];
$regcontact = $_POST['regcontact'];
$regline1 = $_POST['regline1'];
$regline2 = $_POST['regline2'];
$regline3 = $_POST['regline3'];
$regcity = $_POST['regcity'];
$regcounty = $_POST['regcounty'];
$regpost = $_POST['regpost'];
$regpass = $_POST['regpass'];
$customernumber = "";

//Open a new connection to the MySQL server
$mysqli = new mysqli('127.0.0.1','root','','u221062567_esl');
$results = $mysqli->query("SELECT * FROM customers WHERE `Email Address` = '$regemail'");
if($results ->num_rows > 0){
    $customernumber = "exists";
}
else{
    $regpass = md5($regpass);
    $insertrow = $mysqli->query("INSERT INTO customers(`Email Address`, Password, `First Name`, `Last Name`, `Contact Number`, `Address Line 1`, `Address Line 2`, `Address Line 3`, `City/Town`, County, `Post Code`)VALUES('$regemail', '$regpass', '$regfirst', '$reglast', '$regcontact', '$regline1', '$regline2', '$regline3', '$regcity', '$regcounty', '$regpost');");
    if($insertrow){
        $results2 = $mysqli->query("SELECT * FROM customers WHERE `Email Address` = '$regemail'");
            while($row2 = $results2->fetch_array()) {
            $customernumber = $row2["Customer ID"];
            }
    }
    else{
    }
}
print json_encode($customernumber);

//Output any connection error
if ($mysqli->connect_error) {
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}

// close connection 
$mysqli->close();

?>


请帮助我,因为我正在努力理解为什么它会以非顺序的方式运行脚本。非常感谢。

您应该使用准备好的语句来避免sql注入,无论如何,请尝试下面的代码

function checkEmail($email){
   $stmt = $db->prepare("SELECT email from `customers` where email_address = ?");
   $stmt->bind_param('s', $email);
   $stmt->execute();
   $stmt->store_result();
   if($stmt->num_rows < 1){
      return true;
   }
   return false;
}

function addCustomer($regemail, regfirst, reglast....){
    $stmt = $db->prepare("insert into `customers` (email_address, password, first_name, last_name...)" values(?,?,?,?...));
    $stmt->bind_param('ssss', $regemaail, $hash, $regfirst, $reglast....);
    $stmt->execute();
    if($stmt->afffected_rows > 0){
       return $stmt->insert_id;
    }
    return false;
}

请尝试修复此处的输入错误:
$results->num_rows
以防万一,此代码非常不安全。使用MySQLi并不能神奇地阻止SQL注入。你需要使用事先准备好的语句。不要将(用户输入的)变量附加到SQL查询中……另外,MD5可能是站点结束的开始。令人震惊@JayBlanchard:奇怪的是,这似乎不是一个问题:尝试转储变量$results和$results->num\u行以进行调试,并查看查询的结果,这样您就可以判断此查询是否返回了正确的值。
if(checkEmail($_POST['email'])){
    $customer_number = addCustomer($regemail,...);//this will give you id of the insert, you can do another query using this number I guess since I don't understand why you need it.
    if($customer_number){
        //another query
    }

}
else{
   //email exists
}