【问题标题】:Can not Insert record into mysql table with php prepared-statement无法使用 phpprepared-statement 将记录插入 mysql 表
【发布时间】:2013-03-24 21:21:55
【问题描述】:

我的代码部分适用于下面的 ELSE 部分。我的部分意思是它没有 INSERT INTO 表,但由于所有验证阶段都是正确的,它会重定向到感谢页面。

我通常期望的既是。插入表格A N D,然后转到感谢页面。

我认为我的情况与准备好的语句有关,所以我研究了http://php.net/manual/en/mysqli.quickstart.prepared-statements.php,但我无法解决我的问题。我收到NO通知、警告或错误。但我的桌子还是空的。你能帮我解决我的错误吗?

谢谢

BR

    header( "HTTP/1.1 303 See Other" );

if ($_SESSION['hatalar'] != '')
{
    $sonraki_sayfa = sitenin_koku.'yazılar/'.$_SESSION['spesifik_yazi_url'];
    header('Location: ' . $sonraki_sayfa);
}
else //verification passed. save the comment + redirect to thanks page.
{
    /* YORUMU TABLOYA YAZDIRALIM  */
    $sorgum = "INSERT INTO tb_yorumlar (kolon_yorumcu_isim, kolon_statu, kolon_yorum, kolon_hangi_yazara, kolon_hangi_basliga, kolon_yorum_tarihi, kolon_ip) VALUES (?, ?, ?, ?, ?, NOW(), ?)";

    if ($beyan = $db_baglanti->prepare($sorgum)) 
        {
            /* give their values to parameters  */ 
            $bindparametre1 = $_POST['yf-isim'];
            $bindparametre2 = 'onay';
            $bindparametre3 = $_POST['yf-mesaj'];
            $bindparametre4 = $_SESSION['spesifik_yazi_yazar'];
            $bindparametre5 = $_SESSION['spesifik_yazi_baslik'];
            $bindparametre6 = $_SERVER['REMOTE_ADDR'];

            /* bind parameters */
            if (!$beyan -> bind_param("ssssss", $bindparametre1, $bindparametre2, $bindparametre3, $bindparametre4, $bindparametre5, $bindparametre6))
            {echo "parametre atama hatası: (" . $beyan->errno . ") " . $beyan->error;}

            /* execute statement */
            if (!$beyan->execute())
            {echo "Gerçekleştirme hatası: (" . $beyan->errno . ") " . $beyan->error ;}
        }
    else {echo "Hazırlama hatası: (" . $db_baglanti->errno . ") " . $db_baglanti->error;}

    /* TEŞEKKÜR SAYFASINA YÖNLENDİRELİM */
    $sonraki_sayfa = sitenin_koku.'yorumunuz-için-teşekkür-ederim';
    header('Location: ' . $sonraki_sayfa);

}

【问题讨论】:

  • 您要插入的表的结构是什么
  • 是否有任何简短的 sql 命令来粘贴结果,因为我的表写起来有点长
  • 你确定变量都被赋值了吗?
  • 我无法理解。如果没有分配,那么我如何插入特定的正确值
  • 检查我的答案 - 我想你可能在这里处理一些空值。代码看起来不错。

标签: php mysql prepared-statement sql-insert


【解决方案1】:

我会注释掉标题位置部分(见下文)并回显值 - 确保您插入的值实际已填充(非空)。

if ($beyan = $db_baglanti->prepare($sorgum)) {
    /* give their values to parameters  */
    $bindparametre1 = $_POST['yf-isim'];
    $bindparametre2 = 'onay';
    $bindparametre3 = $_POST['yf-mesaj'];
    $bindparametre4 = $_SESSION['spesifik_yazi_yazar'];
    $bindparametre5 = $_SESSION['spesifik_yazi_baslik'];
    $bindparametre6 = $_SERVER['REMOTE_ADDR'];

    if (!$beyan->bind_param("ssssss", $bindparametre1, $bindparametre2, $bindparametre3, $bindparametre4, $bindparametre5, $bindparametre6)) {
        echo "parametre atama hatas?: (" . $beyan->errno . ") " . $beyan->error;
    }

    if (!$beyan->execute()) {
        echo "Gerçekles,tirme hatas?: (" . $beyan->errno . ") " . $beyan->error ;
    }
}
else {
    echo "Haz?rlama hatas?: (" . $db_baglanti->errno . ") " . $db_baglanti->error;
}

/* TES,EKKÜR SAYFASINA YÖNLENDI.RELI.M */
$sonraki_sayfa = sitenin_koku.'yorumunuz-için-tes,ekkür-ederim';
//header('Location: ' . $sonraki_sayfa);

echo $bindparametre1 . "<br>";
echo $bindparametre2 . "<br>";
echo $bindparametre3  . "<br>";
echo $bindparametre4  . "<br>";
echo $bindparametre5  . "<br>";
echo $bindparametre6  . "<br>";

【讨论】:

  • 我试过后,2个通知和1个错误。错误是 (1048) 列 'kolon_hangi_yazara' 不能为空。 AND 2 notices=> notice 1: Undefined index: spesifik_yazi_yazar in ... on line 85 。注意2:未定义的索引:spesifik_yazi_baslik in ... on line 86
  • @AndreChenier 确保将 session_start() 添加到要使用 $_SESSION 变量的任何 PHP 页面的顶部
  • 这很奇怪,因为我已经开始了会话。如果我再次在页面顶部添加 session_start(),页面会给出通知:会话已经开始。
  • @AndreChenier 是的,你不希望它不止一次。我只是确保你有它。所以,好像你有一些空参数(这就是我的想法)。返回您的其他页面并确保您的 SESSION 变量设置正确
  • 所以我必须找出为什么我的会话变量为空。谢谢埃文。
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多