准备好的语句在本地主机上工作,但不能在实时服务器上工作,无法获得输出 [重复]
Posted
技术标签:
【中文标题】准备好的语句在本地主机上工作,但不能在实时服务器上工作,无法获得输出 [重复]【英文标题】:Prepared statements work on localhost but not on a live server, cannot get an output [duplicate] 【发布时间】:2021-12-29 15:35:40 【问题描述】:我曾经制作 $sql 并在没有控制的情况下直接执行它,现在我正在切换到准备好的语句,我已经在我的本地主机上制作了一个,但是当我在实时服务器上尝试它的那一刻。 这是以前的样子
<?php
$sql = "SELECT * FROM tbl_front WHERE active='Yes'";
$res = mysqli_query($conn, $sql);
if($res==TRUE)
$count = mysqli_num_rows($res);
if($count>0)
while($row=mysqli_fetch_assoc($res))
$day1=$row['day1'];
$day2=$row['day2'];
$time1=$row['time1'];
$time2=$row['time2'];
echo "
<h2 class='hours'>RADNO VRIJEME:</h2>
<h2 class='hours'>$day1 - $day2 <br>$time1:00 - $time2:00</h2>";
else
echo "
<h2 class='hours'>Privremeno zatvoreno</h2>";
?>
效果很好,现在我已经把它改成了这个
$sql = "SELECT * FROM tbl_front WHERE active=?";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql))
echo 'lol';
else
mysqli_stmt_bind_param($stmt, "s", "Yes");
mysqli_stmt_execute($stmt);
$res = mysqli_stmt_get_result($stmt);
$count = mysqli_num_rows($res);
if($count>0)
while($row=mysqli_fetch_assoc($res))
$day1=$row['day1'];
$day2=$row['day2'];
$time1=$row['time1'];
$time2=$row['time2'];
echo "
<h2 class='hours'>RADNO VRIJEME:</h2>
<h2 class='hours'>$day1 - $day2 <br>$time1:00 - $time2:00</h2>";
else
echo "
<h2 class='hours'>Trenutno zatvoreno</h2>";
?>
我没有崩溃,但我无法获得输出,我尝试不使用 $count
或将其更改为 $count=mysqli_stmt_num_rows($res);
,但我根本无法从数据库中提取数据,即使使用 print_r($res);
关于如何解决这个问题的任何想法?
【问题讨论】:
我原以为对mysqli_stmt_bind_param()
的调用会生成一些消息,因为您应该传入变量而不是常量。
@NigelRen - 假设他们已经调整了错误报告......无论如何我更喜欢 PDO 而不是 mysqli,这对我来说非常难看。
@ArtisticPhoenix 有人喜欢 mysqli 吗?我认为使用它的所有问题都只是复制/粘贴 10 年前的教程。
【参考方案1】:
为了从 mysqli 获得更详细的输出,您可以在建立连接之前将其添加到您的代码中 ($conn
)。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
这将向错误日志报告比默认设置更详细的错误,并在实时服务器上显示导致错误的原因。
【讨论】:
以上是关于准备好的语句在本地主机上工作,但不能在实时服务器上工作,无法获得输出 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作但不在实时站点上工作[重复]
Laravel 5.2 session flash 在本地主机上工作但在服务器上不工作?