【问题标题】:How to execute multiple queries after each other?如何一个接一个地执行多个查询?
【发布时间】:2017-12-01 22:59:50
【问题描述】:

当用户填写注册表单并点击前端的注册按钮时,应该会发生以下情况。它应该将输入字段中的所有用户信息保存到users表中,然后检查userRole表中是否存在任何记录,如果没有则插入admin,如果是则在userRole列中插入user

基本上是一次插入,一次选择,再一次插入。 我不知道如何设置它,所以它可以工作。现在只在 userRole 表中插入值 user。

 <?php

    // Get the userimage and save it with a unique id
    $sFileExtension = pathinfo($_FILES['fileUserImage']['name'], PATHINFO_EXTENSION);
    $sFolder = 'img_webshop/';
    $sFileName = 'userimage-'.uniqid().'.'.$sFileExtension;
    $sSaveFileTo = $sFolder.$sFileName;
    move_uploaded_file( $_FILES['fileUserImage']['tmp_name'], $sSaveFileTo);

    try {

                // connect to the database
                require 'connect.php';
                // create a query
                $sUserName = $_POST['txtEmailorPhoneNumber'];
                $sFirstName = $_POST['txtFirstName'];
                $sLastName = $_POST['txtLastName'];
                $sPassword = $_POST['txtPassword'];
                $sImage = $sFolder.$sFileName;
                $query1 = $conn->prepare("INSERT INTO users ( userName, firstName, lastName, password, image ) VALUES ( :userName, :firstName, :lastName, :password, :image )");
                $query1->bindParam( ':userName' , $sUserName );
                $query1->bindParam( ':firstName' , $sFirstName );
                $query1->bindParam( ':lastName' , $sLastName );
                $query1->bindParam( ':password' , $sPassword );
                $query1->bindParam( ':image' , $sImage );
                // run the query
                $aResult = $query1->execute();
                $query2 = $conn->prepare("SELECT COUNT ( userRole ) as total FROM userRoles");
                $bResult = $query2->execute();
                if ($bResult === 0 ) {
                    $sUserRole = 'admin';
                }
                else {
                    $sUserRole = 'user';
                }
                $query3 = $conn->prepare("INSERT INTO userRoles ( userRole ) VALUES ( :userRole )");
                $query3->bindParam( ':userRole' , $sUserRole );
                $cResult = $query3->execute();
                $sjResponse = $cResult ? '{"status":"ok"}' : '{"status":"error"}';
                // $lastId = $query->lastInsertId();
                // $result = json_encode( $query->fetch(PDO::FETCH_ASSOC) );

                echo $sjResponse; 


            } catch (Exception $e) {

                echo "ERROR";

            }

    ?>

【问题讨论】:

  • 如果您使用 PDO,只需删除 bindParam() 并通过 execute() 传递变量,您就可以循环访问许多 execute() 函数。
  • 在您尝试检查 userRoles 记录的地方,您调用 $query2-&gt;execute(),但实际上并没有调用 $query2-&gt;fetch() 来获取数据。这可能只是运气好 - 但它不正确。
  • 从不存储纯文本密码。而是使用password_hash()password_verify()。如果您使用的是 5.5 之前的 PHP 版本,请不要使用 MD5 或 SHA1 来散列密码。相反,您可以使用this compatibility pack

标签: php mysql


【解决方案1】:

改变这个:

if ($bResult === 0 ) {
$sUserRole = 'admin';
}
else {
 $sUserRole = 'user';
}

到这里:

if ($bResult > 0 ) {
$sUserRole = 'user';
}
else {
 $sUserRole = 'admin'; 
}

这应该可以解决它!

【讨论】:

  • 这样我每次运行时只插入admin,反之只插入user。行检查似乎无法正常工作。
  • 尝试回显 "$bResult->total" 如果你得到一个数字然后将代码从 if ($bResult > 0 ) 更改为 if ($bResult->total > 0 )
猜你喜欢
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2017-10-17
  • 2022-08-16
  • 2017-05-28
  • 2016-01-17
  • 2014-07-15
相关资源
最近更新 更多