【问题标题】:PHP - Insert into db MySql throught php codePHP - 通过 php 代码插入 db MySql
【发布时间】:2018-02-09 16:54:50
【问题描述】:

我不知道为什么,我无法在我的数据库表中插入新行

我使用这个查询:

 $db->write("INSERT INTO sest$myYear (esiti, esitiPositivi, esitiNegativi, ambi, nTerni, terno, sestina) VALUES ($esiti, $esitiPositivi, $esitiNegativi,$ambi,$nTerni,$terno,$sestinaString )");  

变量是在之前声明的,它们是 int 和 string。 如果我在查询 sql 中使用相同的查询,它就可以工作。 我正在使用调试,没有错误。软件执行查询并继续。

我尝试了类似的查询:

 $db->write("INSERT INTO sest$myYear (esiti, esitiPositivi, esitiNegativi, ambi, nTerni, terno, sestina) VALUES ('$esiti', '$esitiPositivi', '$esitiNegativi','$ambi','$nTerni','$terno','$sestinaString' )");

但没什么,都是一样的。

我还尝试了对另一个表的另一个查询(通过 php),它可以工作。所以问题出在这个查询中。

如果您需要更多信息,请询问我。

编辑:

这是我对表和变量的定义。

            $esiti = $sestinaObj[0][1];
            $esitiPositivi = $sestinaObj[1][1];
            $esitiNegativi = $sestinaObj[2][1];
            $nTerni = $sestinaObj[3][1];
            $ambi = $sestinaObj[4][1];
            $sestina = $sestinaObj[5][1];
            $colpi = $sestinaObj[6][1];
            $terno = $sestinaObj[7][1];

我知道我可以直接在查询中使用 $sestinaObj。

这是方法

function isMyComposition($ventiCinqueEstraz, $quad, $successive, $db, $myYear){


$db = new DBM();
//    if(count($ventiCinqueEstraz) <= 25) return false; 
    $sestina = array(0,0,0,0,0,0);
$colpi = 0;
$count = 0;
$posizione = 0;
while($count < 2){
    for($i=0; $i<25; $i++){//NON FUNZIONA
        $sestinaObj= array(      
        array("esiti",0),
        array("esitiPositivi",0),
        array("esitiNegativi",0),
        array("nterni",0),
        array("ambi",0),
        array("sestina",array(0,0,0,0,0,0)),
        array("colpi",0),
            array("terno",0)
    );
     $sestina =   addOccurenceComp($quad, $sestina, array(     $ventiCinqueEstraz[$count][$i]['uno'],
                                                               $ventiCinqueEstraz[$count][$i]['due'],
                                                               $ventiCinqueEstraz[$count][$i]['tre'],
                                                               $ventiCinqueEstraz[$count][$i]['quattro'],
                                                               $ventiCinqueEstraz[$count][$i]['cinque']),$db,$myYear);
   $result =  $db->read("SELECT sestina FROM sest$myYear where sestina = $sestina ");
     for($j=25; $j<50; $j++){


  $sestinaObj = checkSestina($sestinaObj, $sestina, $quad, $colpi, $posizione, array(     $ventiCinqueEstraz[$count][$j]['uno'],
                                                               $ventiCinqueEstraz[$count][$j]['due'],
                                                               $ventiCinqueEstraz[$count][$j]['tre'],
                                                               $ventiCinqueEstraz[$count][$j]['quattro'],
                                                               $ventiCinqueEstraz[$count][$j]['cinque']),$db,$myYear);
    }
      $esiti = $sestinaObj[0][1];
            $esitiPositivi = $sestinaObj[1][1];
            $esitiNegativi = $sestinaObj[2][1];
            $nTerni = $sestinaObj[3][1];
            $ambi = $sestinaObj[4][1];
            $sestina = $sestinaObj[5][1];
            $colpi = $sestinaObj[6][1];
            $terno = $sestinaObj[7][1];

    if(count($result) <= 0){
            $insertResultTerni = $db->read("SELECT Colpi from terni where colpi = $colpi");
            if($insertResultTerni[0]['Colpi'] == "")

                $db->write("INSERT INTO terni (colpi) values ($colpi)");


            $sestinaString = implode(" ",$sestina);

         $db->write("INSERT INTO sest2016 (esiti, esitiPositivi, esitiNegativi, ambi, nTerni, terno, sestina) VALUES ($esiti, $esitiPositivi, $esitiNegativi,$ambi,$nTerni,$terno,$sestinaString )");  
    }         
        else {


            $insertResultTerni = $db->write("INSERT INTO terni (colpi) values ($colpi)");
          $esiti = mysql_real_escape_string($esiti);

$db->write("INSERT INTO sest$myYear (esiti, esitiPositivi, esitiNegativi, ambi, nTerni, terno, sestina) VALUES (0,0,0,0,0,0,0)"); 
       }

      }


    $count++;
}
}

我知道代码非常非常难看

编辑 2:

现在我尝试将所有列类型更改为 varchar 并将每个变量转换为字符串。我也有同样的问题。

 $esiti = !empty((string)$sestinaObj[0][1]) ? (string)$sestinaObj[0][1] : "";
            $esitiPositivi = !empty((string)$sestinaObj[1][1]) ? (string)$sestinaObj[1][1] : "";
            $esitiNegativi = !empty((string)$sestinaObj[2][1]) ? (string)$sestinaObj[2][1] : "";
            $nTerni = !empty((string)$sestinaObj[3][1]) ? (string)$sestinaObj[3][1] : "";
            $ambi = !empty((string)$sestinaObj[4][1]) ? (string)$sestinaObj[4][1] : "";
            $sestina = !empty((string)$sestinaObj[5][1]) ? implode(" ", $sestina) : "";
            $colpi = !empty((string)$sestinaObj[6][1]) ? (string)$sestinaObj[6][1] : "" ;
            $terno = !empty((string)$sestinaObj[7][1]) ? (string)$sestinaObj[7][1] : "";

         $db->write("INSERT INTO sest2016 (esiti, esitiPositivi, esitiNegativi, ambi, nTerni, terno, sestina) "
                 . "VALUES ($esiti, $esitiPositivi, $esitiNegativi,$ambi,$nTerni,$terno,$sestina)");  

这是表定义

【问题讨论】:

  • 您在检查错误吗? mysql会告诉你是否有sql错误,php会告诉你是否有语法错误。
  • 尝试echo将语句显示在屏幕上-检查明显的错误并尝试在您的mysql客户端中运行查询
  • 您是否在任何地方提交更改?
  • @JohnConde 是的,我检查了错误,但没有。我没有任何错误。
  • @RamRaider 我尝试回显到循环中,但它不起作用。所以我在页面的开头尝试了所有变量= 0,但是没有错误...

标签: php mysql insert


【解决方案1】:

如果变量包含字符串值,并且该字符串包含引号,则必须转义该引号。假设您要插入 $esiti,它等于 John O'Hara,那么您必须在构造查询时转义引号。

$esiti = mysql_real_escape_string($esiti);

$db->write("INSERT INTO sest$myYear (esiti, esitiPositivi, esitiNegativi, ambi, nTerni, terno, sestina) VALUES ('$esiti', '$esitiPositivi', '$esitiNegativi','$ambi','$nTerni','$terno','$sestinaString' )");

注意:mysql_real_escape_string 在以下字符前添加反斜杠:\x00、\n、\r、\、'、" 和 \x1a。

【讨论】:

  • 嗨,我试过你的代码,但它是一样的...... $esiti 没有引号或类似的东西......所以也许还有另一个问题,但我不知道。 ..
  • 我试图插入这个查询: $db->write("INSERT INTO sest$myYear (esiti, esitiPositivi, esitiNegativi, ambi, nTerni, terno, sestina) VALUES (0,0,0, 0,0,0,0)");但是没有,它不起作用:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2014-06-25
  • 2013-02-22
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多