【问题标题】:PHP, SQL Insert no worksPHP,SQL插入无效
【发布时间】:2017-07-05 06:58:38
【问题描述】:

我想知道为什么我无法将新数据插入我的数据库。 在 vardump 中我得到了很好的结果,但没有任何东西添加到我的数据库中

数据库:c_id = AutoInc. | a_id | u_id | c_head | c_content | c_date =时间戳

if (isset($_POST['c_submit'])) {
   $sql_najdi_prihlaseneho_uzivatela = "SELECT * FROM users where u_name = '$_SESSION[username]'";
   $vysledokHladania = mysqli_query($connect_to_db, $sql_najdi_prihlaseneho_uzivatela);
   if (mysqli_num_rows($vysledokHladania) == 1) {
       while ($db_data_prihlaseneho_uzivatela = mysqli_fetch_assoc($vysledokHladania)) {
            $sql_vloz_komentar = "INSERT INTO comments (a_id, u_id, c_head, c_content, c_date) VALUES ($_GET[a_id], $db_data_prihlaseneho_uzivatela[u_id], $_POST[c_hlavicka], $_POST[c_obsah], 'NOW()')";
            mysqli_query($connect_to_db, $sql_vloz_komentar);
        }
    }
}

【问题讨论】:

  • a) 使用准备好的语句来避免 SQL 注入。 b) 检查mysqli_error() 以查看您的查询有什么问题。
  • 另外,对myqsli_result 对象执行count() 没有意义,您应该检查找到的行数。
  • @Sirko mysqli_error 没有给出任何东西
  • 我猜到了,有些值需要包含在' 中。 mysqli_query() 调用的返回值是多少?
  • @Sirko bool(false) 所以问题是 SQL 命令,但 idk where =\

标签: php mysql sql mysqli


【解决方案1】:

您可以使用date('Y-m-d h:i:s') 通过 PHP 代码将当前日期时间存储在我们的数据库中,并且在您的查询中您错过了将 '' 放入数组索引中。
试试这个

if (isset($_POST['c_submit'])) {
    $date=date('Y-m-d h:i:s');
    $sql_najdi_prihlaseneho_uzivatela = "SELECT * FROM users where u_name = '".$_SESSION['username']."'";
    $vysledokHladania = mysqli_query($connect_to_db, $sql_najdi_prihlaseneho_uzivatela);
    if (mysqli_num_rows($vysledokHladania) == 1) {
        while ($db_data_prihlaseneho_uzivatela = mysqli_fetch_assoc($vysledokHladania)) {
            $sql_vloz_komentar = "INSERT INTO comments (a_id, u_id, c_head, c_content, c_date) VALUES 
                                (".$_GET['a_id'].",".$db_data_prihlaseneho_uzivatela['u_id']." ,".$_POST['c_hlavicka']." ,".$_POST['c_obsah']." ,$date)";
            mysqli_query($connect_to_db, $sql_vloz_komentar);
        }
    }
}

我想它会对你有所帮助。

【讨论】:

  • 很有趣,所以我应该将数据库列 TIME STEMP 更改为 DATE 吗?还是简单的 varchar / Text ?
  • 只需将数据库列更改为 varchar 。
  • 没有工作 =\ 问题可能出在 a_id 中,因为它与另一个数据库表有关系,其 INT 从 1 到 ...
  • @Patrik Horváth 好的,那么您需要先从该关系表中获取 a_id 值,然后将其插入当前表。
  • 并且来自 $_GET 的值不正确?
【解决方案2】:

你是否转义了 varchar 字符? 其他可能的错误是数据库中的日期格式。 postecho $sql_vloz_komentar查看insert语句和表结构

if (isset($_POST['c_submit'])) {
   $sql_najdi_prihlaseneho_uzivatela = "SELECT * FROM users where u_name = '$_SESSION[username]'";
   $vysledokHladania = mysqli_query($connect_to_db, $sql_najdi_prihlaseneho_uzivatela);
   if (mysqli_num_rows($vysledokHladania) == 1) {
       while ($db_data_prihlaseneho_uzivatela = mysqli_fetch_assoc($vysledokHladania)) {
            $sql_vloz_komentar = "INSERT INTO comments (a_id, u_id, c_head, c_content, c_date) VALUES ($_GET[a_id], $db_data_prihlaseneho_uzivatela[u_id], '$_POST[c_hlavicka]', '$_POST[c_obsah]', 'NOW()')";
            mysqli_query($connect_to_db, $sql_vloz_komentar);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多