当前位置: 首页 > 知识库问答 >
问题:

试着用一个准备好的陈述来抓住

锺高翰
2023-03-14

我在这个问题上经历了一段非常艰难的时光,有人建议我学习如何尝试捕捉块,以便更容易地找出错误所在。这是我第一次尝试。

我的@stmt2没有为我的print\r($stmt2)行定义,这是一个错误。

Notice: Undefined variable: stmt2 

这是我尝试接球的尝试。我有没有做错什么,导致这个错误出现?

try {
$con = mysqli_connect("localhost", "", "", "");
if (mysqli_connect_errno()) {
    throw new Exception("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$cid = $_GET['cid'];
$tid = $_GET['tid'];
$userid = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );

//Prepare
if($stmt = mysqli_prepare($con, "SELECT * FROM forum_topics WHERE `category_id`=? AND `id`=? LIMIT 1")) {

    mysqli_stmt_bind_param($stmt, "ii", $cid, $tid);
    mysqli_stmt_execute($stmt);

      /* fetch value */
    mysqli_stmt_fetch($stmt);

    if (!$stmt) {
        throw new Exception($con->error);
    }
}
$stmt->store_result();
$numrows = $stmt->num_rows;
if($numrows == 1){
    echo "<table width='100%'>";
    if ( $_SESSION['user'] ) { 
        echo "<tr><td colspan='2'><input type='submit' value='Add Reply' onclick=\"window.location = 
    'forum_post_reply.php?cid=".$cid."$tid=".$tid."'\"> <hr />";
    } else {
        echo "<tr><td colspan='2'><p>Please log in to add your reply</p><hr /></td></tr>";
    }

/*} 
catch (Exception $e)
{
    //print_r($e);
    echo "There has been an error with the $stmt block.";
}

print_r($stmt);

try {*/
    foreach($stmt as $row) {

        //Prepared SELECT stmt to get forum posts
        if($stmt2 = mysqli_prepare($con, "SELECT * FROM forum_posts WHERE `category_id`=? AND `topic_id`=?")) {
        //var_dump($stmt2);

            mysqli_stmt_bind_param($stmt2, "ii", $cid, $tid);
            mysqli_stmt_execute($stmt2);
        }   
            while (mysqli_stmt_fetch($stmt)) {
                echo "<tr><td valign='top' style='border: 1px solid #000000;'>
                <div style='min-height: 125px;'>".$row['topic_title']."<br />
                by ".$row2['post_creator']." - " .$row2['post_date']. "<hr />" . $row2['post_content'] ."</div></td>
                <td width='200' valign='top' align='center' style='border: 1px solid #000000;'>User Info Here!</td></tr>
                <tr><td colspan='2'><hr /></td></tr>";
            }
    }       
    }   else {
        echo "<p>This topic does not exist.</p>";
        }
}
catch (Exception $e)
{
    //print_r($e);
    echo "There has been an error with the foreach $stmt2 block.";
}
print_r($stmt2);

共有1个答案

姚麒
2023-03-14

如果您想跟踪代码中发生的所有错误,您可以使用try,cat语句以正确的方式处理它们。在try块中,你可以把你所有的代码或其中的一部分。如果某个东西失败了,它将生成一个异常。

您也可以使用下一条语句引发该异常:

throw new Exception("I think something's failing");

在try block之后,您必须声明将处理异常的catkblock,使其对您可用。在下面的示例中,我将打印错误消息。

<?php

try {
    /* all your code */
} catch (Exception $e) {
   /* if something fails inside try block will be catched here */
    print $e->getMessage();
}

您可以在此处找到更多关于此的信息:http://php.net/manual/en/language.exceptions.php

 类似资料:
  • 问题内容: 不久前开始使用PDO准备的语句,据我了解,它为您完成了所有转义/安全性工作。 例如,假设$ _POST [‘title’]是一个表单字段。 这真的安全吗?我还需要做其他事情吗?我还需要考虑什么? 谢谢。 问题答案: 严格来说,实际上不需要转义,因为参数值永远不会插值到查询字符串中。 查询参数的工作方式是在调用时将查询发送到数据库服务器,然后在调用时将参数值发送到数据库服务器。因此,它们

  • 最近,我们对一些Cassandra集群进行了压力测试,比较了一致性级别、准备好的/未准备好的语句和同步/异步执行模式的所有组合的性能,在每种配置中,最高的性能总是异步运行的(任何/一个)未准备好的语句的组合!! 对于有意义的位,任何/一个一致性级别的限制都较少,因此应该是最快的。此外,异步运行查询,因此利用并行计算应该比按顺序运行它们更快,但是准备好的语句和非准备好的语句呢? 我们总是读到和听到(

  • 我正在用spring Boot做一个项目。:图书馆管理系统。为了得到要计算的罚款,我已经更改了系统日期。但是,在此之后,当我重新运行应用程序时,在控制台中会出现以下错误 配置为侦听端口8080的Tomcat连接器无法启动。端口可能已在使用中,或者连接器配置错误。 验证连接器的配置,识别并停止正在侦听端口8080的任何进程,或者将此应用程序配置为侦听另一个端口。

  • 我有以下准备的一个准备好的声明失败了... 我在我的第一份准备好的声明中几乎有同样的准备,而且它进行得很好。我不确定是否我有两个准备好的声明,如果这是造成一个问题,或情况可能是什么? 现在我有个错误... 更新-可能的内部连接,像这样?

  • 问题内容: 我正在尝试使用准备好的语句来设置表名称以从中选择数据,但是在执行查询时,我总是收到错误消息。 错误和示例代码如下所示。 有什么想法可能会导致这种情况? 问题答案: 表名不能用作参数。它必须是硬编码的。因此,您可以执行以下操作: