-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

したがって、私たちが知っているように、mysql の場合のように実際の mysqli の結果はありません。

誰があなたにそう言ったのですか?がある。特に、prepare()/execute() ではなく、プレーンな query() を使用している場合:

// 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"];
    ...
}

多くの電子メールが送信されたのと同じ数の "Refresh" ヘッダーを送信していることに注意してください。

そのため、PHP のセットアップで何かが欠けている可能性がありますが、何が何かわかりません。

PHP のセットアップではなく、コードの中にあります。
コードで未加工の API 関数を使用しているため (これは私の好みにはうんざりです)、常に少なくともこの方法でクエリを実行してください。

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

yopr コードやサーバーの問題点、または失敗したクエリに関連する問題が通知されます。

于 2013-01-21T15:45:37.553 に答える