0

这个问题我已经有好几天了,我似乎看不出问题出在哪里。我已经以多种方式查看了这些功能,甚至查找了 php 站点,但我仍然无法解决这个问题。这是我遇到问题的代码:

$sql = mysqli_query($db_connect, "INSERT INTO forum_post(post_author, post_author_id, date_time, type, section_title, section_id, thread_title, post_body) VALUES($log_username, $log_id, now(), 'a', '$forum_section_title', '$forum_section_id', '$post_title', '$post_body')");
    $this_id = mysqli_insert_id($db_connect);
    header("location: ../view_thread.php?id=$this_id");

编辑...

所以我可以展示我是如何处理错误的(而不是我可以看到消息):

$sql = mysqli_query($db_connect, "INSERT INTO forum_post(post_author, post_author_id, date_time, type, section_title, section_id, thread_title, post_body) VALUES('$log_username', '$log_id', now(), 'a', '$forum_section_title', '$forum_section_id', '$post_title', '$post_body')");
    if(mysqli_error($db_connect)) {
        $message = mysqli_error($db_connect);
        header("location: ../message.php?msg=$message");    
    }
    $this_id = mysqli_insert_id($db_connect);
    header("location: ../view_thread.php?id=$this_id");
    exit();
4

3 回答 3

0

我会推荐使用 PDO,因为它更安全且直接。而且因为它不会让你犯错误和遇到问题。

这是您在 PDO 中的代码。测试这个:

try {
    // Prepare our connection string
    $con = new PDO("mysql:host=".HOST.";dbname=".DBNAME, USER, PASS);
}
catch(PDOException $e) {
    // Connection error jumps here  
    echo $e->getMessage();  
}
// Prepare our Insert Query
$query = $con->prepare("INSERT INTO forum_post(post_author, post_author_id, date_time, type, section_title, section_id, thread_title, post_body) VALUES(:post_author, :post_author_id, :date_time, :type, :section_title, :section_id, :thread_title, :post_body)");
// Get our data aligned in an array.
$data = array('post_author' => $log_username, 'post_author_id' => $log_id, 'date_time' => now(), 'type' => 'a', 'section_title' => $forum_section_title, 'section_id' => $forum_section_id, 'thread_title' => $post_title, 'post_body' => $post_body);
try {
    // Try to execute our Insert Query with the given Data
    $query->execute($data);
}
catch(PDOException $e) {
    // Insert error jumps here
    echo $e->getMessage();
}
$this_id = $con->lastInsertId();
header("location: ../view_thread.php?id=$this_id");

请务必在代码中提到的占位符中替换您的主机、数据库、用户和密码...

于 2013-06-15T00:34:02.883 回答
0

检查您的 php 安装是否设置为报告错误。然后死于不成功的 MySQL 查询执行并检查你得到的错误。

要启用错误报告,请将以下行放在 php 文件的顶部:

<?php
error_reporting(E_ALL ^ E_NOTICE);
于 2013-06-15T01:24:05.227 回答
0

我不确定您是如何使用mysqli_error($db_connect);的,因为您应该在使用时收到错误消息。

一个问题是你没有引用你的字符串值:

$sql = mysqli_query($db_connect, "INSERT INTO forum_post(post_author, post_author_id, date_time, type, section_title, section_id, thread_title, post_body) 
         VALUES($log_username, $log_id, now(), 'a', '$forum_section_title', '$forum_section_id', '$post_title', '$post_body')");
//              ^^^^^^^^^^^^^ here      ^^^^^ and here
//              (assuming $log_id is an integer...)

但我同意@MiroMarkarian 的观点,即您应该使用准备好的语句(也可以在 mysqli 中)。

于 2013-06-15T00:38:09.093 回答