duanjia7607 2018-02-09 16:54
浏览 26

PHP - 通过php代码插入db MySql

I don't know why, i can't insert a new line into my db table

I use this query:

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

Variables are declared before and they are int and string. If I use the same query into a query sql, it works. I'm using debugging and there aren't mistakes. The software executes the query and goes on.

I tried with a similar query like:

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

But nothing, it's the same.

I tried also another query into another table (through php) and it works. So the problem is in this query.

If you need more information, ask me.

EDIT:

This is my definition for tables and variables.

            $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];

I know that I can use directly $sestinaObj into the query.

This is the method

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++;
}
}

I know that the code is very very ugly

Edit 2:

Now I tried to change all column type into varchar and converted every variables to string. I have the same problem.

 $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)");  

This is the table definition enter image description here

  • 写回答

1条回答 默认 最新

  • dongqiu5184 2018-02-09 17:17
    关注

    If a variable contains string value, and that string contains a quote, then you must escape that quote. Say you are inserting $esiti which is equals to John O'Hara, then you must escape the quote when constructing the query.

    $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' )");
    

    Note: mysql_real_escape_string prepends backslashes to the following characters: \x00, , , \, ', " and \x1a.

    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?