mysqli结果函数

时间:2013-01-21 15:32:49

标签: php mysqli

因为我们知道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的方法,或者我错过了我在这里的当前函数中的某些内容?

2 个答案:

答案 0 :(得分: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");

}

答案 1 :(得分:1)

  

因此我们知道没有与mysql一样的mysqli实际结果

谁说你呢?有。特别是如果你使用普通的query(),而不是prepare()/ execute():

// 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代码或服务器或与失败查询相关的任何内容有什么问题