MYSQLI准备声明白页

时间:2016-01-07 17:13:46

标签: php mysqli prepared-statement

我正在尝试将一些用于通知的PHP代码转换为更合适的Prepared语句。无论我尝试什么,它都打破了我的页面。是否有任何机构可以告诉我错误在哪里?

编辑页面不是完全空白。此代码后的分页符。

$acctNotsQry = $redoDB->prepare('SELECT message, nDate FROM notifications WHERE uID = ? AND nSeen = "0" ORDER BY nDate DESC');
$acctNotsQry->bind_param('i', intval($memID));
$acctNotsQry->execute();
$acctNotsQry->store_result();
$acctNotsQry->bind_result($notMessage, $notnDate);

if($acctNotsQry->num_rows == 0){
    echo '<li><div class="nilNots">NO NOTIFICATIONS</div></li>';
} else {
    while($acctNotsQry->fetch()) {
        ?>
        <li><i class="fa fa-bell"></i> <?php echo htmlspecialchars_decode(stripslashes($notMessage)); ?>
        <p><?php echo date('d M Y - h:ia', strtotime($notnDate)); ?></p></li>
        <?php
    }
}
$acctNotsQry->close();

第二次编辑:以下代码可以正常工作,上面没有。它可能有助于解决方案:

$acctNotsQry = 'SELECT * FROM notifications WHERE uID = "'.$memID.'" AND nSeen = "0" ORDER BY nDate DESC';  
$acctNotsRes = $redoDB->query($acctNotsQry);
$acctNotsNum = $acctNotsRes->num_rows;
if($acctNotsNum == 0){
    echo '<li><div class="nilNots">NO NOTIFICATIONS</div></li>';
} else {
    while($acctNotsRow = $acctNotsRes->fetch_assoc()){
    $notMsg = $acctNotsRow['message'];
    ?>
    <li><i class="fa fa-bell"></i> <?php echo htmlspecialchars_decode(stripslashes($notMsg)); ?>
    <p><?php echo date('d M Y - h:ia', strtotime($acctNotsRow['nDate'])); ?></p></li>
    <?php
    }
}

我试过寻找无效的解决方案。 非常感谢提前。

1 个答案:

答案 0 :(得分:1)

更改

$acctNotsQry->bind_param('i', intval($memID));

$acctNotsQry->bind_param('i', $memID);

bind_param的第二个和后面的参数是引用参数,因此您必须在那里使用变量,而不是表达式。您不需要自己调用intval(),第一个参数中的i类型告诉mysqli在将其发送到MySQL时将其转换为整数。