【问题标题】:Issues getting SQL statement to select the items I want it to获取 SQL 语句以选择我想要的项目的问题
【发布时间】:2015-07-11 19:42:15
【问题描述】:

我正在尝试向组级别为 4 或 5 的用户发送电子邮件。我在“用户”表中区分了组级别。我正在尝试获取“组”级别为 4 或 5 的用户的电子邮件和“名字”。然后使用该电子邮件和名字来创建变量并将其用于我的电子邮件。

我的 SQL 语句结构是否不正确?我没有收到任何错误。

我苦苦挣扎的领域是这些线。

if($sql_email = "SELECT 'email' FROM 'users' WHERE 'group' = 4 AND 5") {

    $email = $con->query($sql_email);
} else {
    echo "Query not working right";
}

        $sql_name = "SELECT 'firstname' FROM 'users' WHERE 'group' = 4 AND 5";
            $admin_name = $con->query($sql_name);

更多代码展示我如何使用它

ini_set('display_errors', 1);
error_reporting(E_ALL);

 //User Request Email that goes to the commissioner and creator
            if(isset($_POST['submit'])) {

                $con = mysqli_connect("localhost","root","","db");
                if (mysqli_connect_errno()) {
                    printf("Connect failed: %s\n", mysqli_connect_error());
                        exit();
                }

                if($sql_email = "SELECT 'email' FROM 'users' WHERE 'group' = 4 AND 5") {

                $email = $con->query($sql_email);
                } else {
                    echo "Query not working right";
                }

                $sql_name = "SELECT 'firstname' FROM 'users' WHERE 'group' = 4 AND 5";
                $admin_name = $con->query($sql_name);

                $firstname = $_POST['firstname'];
                $lastname = $_POST['lastname'];
                $username = $_POST['username'];


                $to = $email;
                $subject = 'There is a new user request to join the SFL';
                $message = '
                    <html>
                    <head>
                      <title>New SFL User Request</title>
                    </head>
                    <body>
                        <p>Hi '.$admin_name.',</p><br>
                        <p>Thank you for wanting to join the!</p>

                          <p>Thank you,</p>
                          <p>Administration</p>
                    </body>
                    </html>
                          ';

                $from = "user-requests@example.com";
                $Bcc = "user-requests-confirm@example.com";

                // To send HTML mail, the Content-type header must be set
                $headers  = 'MIME-Version: 1.0' . "\r\n";
                $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

                // Additional headers
                $headers .= 'To: ' .$to. "\r\n";
                $headers .= 'From: ' .$from. "\r\n";
                $headers .= 'Bcc: '.$Bcc. "\r\n";

                // Send the email
                mail($to,$subject,$message,$headers);
                }

更新

$sql_email = "SELECT `email` FROM `users` WHERE `group` = 4 OR `group` = 5";

    $email = $con->query($sql_email);

if( ! $con->query($sql_email) )
    echo "Query not working right";

$sql_name = "SELECT `firstname` FROM `users` WHERE `group` = 4 OR `group` = 5";
$admin_name = $con->query($sql_name);

我得到这个错误.. 可捕获的致命错误:无法将类 mysqli_result 的对象转换为第 219 行 /home4/db/public_html/example.com/register.php 中的字符串

第 219 行是这个...

<p>Hi '.$admin_name.',</p><br>

【问题讨论】:

  • 除了代码之外,如果您要查询用户输入到您的数据库中,请不要使用 mysql 查询。使用 PDO 并将变量绑定为参数。虽然 mysqli 比使用 mysql() 函数更好,但 PDO 更安全。
  • PDO究竟比Mysqli更安全?

标签: php mysql sql mysqli


【解决方案1】:

执行选择查询后,您需要获取记录。我假设您需要向找到的所有用户发送电子邮件。

$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$username = $_POST['username'];

$sql_email = "SELECT `email`, `firstname` FROM `users` WHERE `group` IN (4,5)";
$users = $con->query($sql_email);
if (($users) && ($users->num_rows > 0)){// Got any record?
    // output data of each row
    while($user = $users->fetch_assoc()){
        $to = $user['email'];
        $subject = 'There is a new user request to join the SFL';
        $message = '
            <html>
            <head>
              <title>New SFL User Request</title>
            </head>
            <body>
                <p>Hi '.$user['firstname'].',</p><br>
                <p>Thank you for wanting to join the!</p>

                  <p>Thank you,</p>
                  <p>Administration</p>
            </body>
            </html>
                  ';

        $from = "user-requests@example.com";
        $Bcc = "user-requests-confirm@example.com";

        // To send HTML mail, the Content-type header must be set
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

        // Additional headers
        $headers .= 'To: ' .$to. "\r\n";
        $headers .= 'From: ' .$from. "\r\n";
        $headers .= 'Bcc: '.$Bcc. "\r\n";

        // Send the email
        mail($to,$subject,$message,$headers);
    }
}
else{
    echo "No User Found!";
}

您可以从这里了解更多信息:Select Data With MySQLi

【讨论】:

    【解决方案2】:
    SELECT anything FROM `users` WHERE `group` = 4 OR `group` = 5
    

    另外,

    if($sql_email = "SELECT 'email' FROM 'users' WHERE 'group' = 4 AND 5")
    

    没有用,因为结果总是正确的。

    你可以说

    if( ! $con->query($sql_email) )
        echo "Query not working right";
    

    【讨论】:

    • 我更新了我的问题。我将我的代码基本上更改为您所拥有的,并且收到一条错误消息,说我无法将变量转换为字符串。关于你的答案的问题。为什么 Select anything ,这不是违背了获取电子邮件和名字字段的目的吗?
    • 我给了你一个提示来修复你的脚本而不是它的实际副本。将anything 更改为电子邮件、名字……我只是想说group = 4 AND 5 在这种情况下不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多