-1

所以我们知道没有实际mysqli result的,mysql所以我处于困境中。我进行了快速搜索,发现了一个可以复制相同效果的函数,但它似乎不起作用。我不确定是我实现错了还是功能不好。

这是脚本

<?php
if($_SESSION['aname'] == NULL){
header("Location: index.php?au=login");
}
if(isset($_POST['submit']))
{
    function email_result($res, $row, $field=0) {
        $res->data_seek($row);
        $datarow = $res->fetch_array();
        return $datarow[$field];
    }
    if (get_magic_quotes_gpc())
    {
        $subject = stripslashes($_POST['subject']);
        $message = stripslashes($_POST['message']);
    }
    else
    {
        $subject = $_POST['subject'];
        $message = $_POST['message'];
    }

    $result = $db->query("SELECT `email` FROM `members` WHERE `alert` = '1'");
    $num = $result->num_rows;
    $i=0;
    while($i < $num) 
    {
        $email = email_result($result,$i,"email");
        mail($email, $subject, $message, "From: ".$settings_info['website_name']." Admin<".$settings_info['admin_email'].">");
        echo "Email sent to: ".$email."<br />";
        header("Refresh: 2; url=index.php?au=send_message");
        $i++;
    }
}
else
{
?>
<table align='center'>
    <form method='post' action=''>
        <tr><td>Subject:</td><td><input type='text' name='subject' id='subject' value='' /></td></tr>
        <tr><td>Message: </td><td><textarea name='message' id='home_text' cols='50' rows='15'></textarea></td></tr>
        <tr><td></td><td><input type='submit' name='submit' id='submit' value='Send Message' /></td></tr>
    </form>
</table>
<?php
}
?>

将脚本与 Xampp 一起使用时,它会产生正确的信息,并会回显它已将电子邮件发送出去,即使它实际上并没有发送它们,这意味着它工作正常。所以我可能在我的 PHP 设置中遗漏了一些东西,但我不知道是什么。

所以我的问题是,有没有mysql_result比我现在使用的更好的方法来复制,mysqli或者我在我这里拥有的当前函数中遗漏了一些东西?

4

2 回答 2

1

您需要从资源中获取每一行。像这样:

$result = $db->query("SELECT `email` FROM `members` WHERE `alert` = '1'");
$num = $result->num_rows;

while($row = $result->fetch_assoc())  //  <-------------here's how to get the data
{
    $email = $row'[email'];
    mail($email, $subject, $message, "From: ".$settings_info['website_name']." Admin<".$settings_info['admin_email'].">");
    echo "Email sent to: ".$email."<br />";
    header("Refresh: 2; url=index.php?au=send_message");

}
于 2013-01-21T15:39:47.337 回答
1

所以我们知道没有实际的 mysqli 结果,因为有 mysql

谁说你的?有。特别是如果您使用的是普通查询(),而不是准备()/执行():

// here goes your mysqli result:
$result = $db->query($query);
//now you can iterate over it getting row data
while ($row = $result->fetch_assoc($result)) {
    $email = $row["email"];
    ...
}

请注意,您发送的“刷新”标题与发送的电子邮件一样多。

所以我可能在我的 PHP 设置中遗漏了一些东西,但我不知道是什么。

不在 PHP 设置中,而是在代码中。
当您在代码中使用原始 API 函数时(这对我来说很恶心),请始终至少以这种方式运行您的查询

$result = $db->query($query) or trigger_error($db->error." [$query]");

并且您会被告知 yopr 代码或服务器有什么问题或与失败查询相关的任何内容

于 2013-01-21T15:45:37.553 回答