php
  • mysql
  • mysqli
  • insert
  • 2014-04-08 3 views -2 likes 
    -2

    다음 코드가 있지만 문제는 쿼리가 실패하고 아무것도 삽입되지 않습니다. $has_serial이 거짓 일 때도 아무것도 삽입되지 않습니다.PHP Mysqli 쿼리가 실패합니다

    내가 if ($has Serial을 제거하면 ... ELSE의 쿼리가 정상적으로 작동합니다.

    왜 그럴까요?

     $data6=mysqli_query($link, "SELECT * FROM basket WHERE user='$user'"); 
          while($info6=mysqli_fetch_array($data6)){ 
    
    
        $article=$info6['article']; 
        $amount=$info6['amount']; 
        $amount= -$amount; 
    
        $data7=mysqli_query($link, "SELECT * FROM article WHERE articlenr ='$article'"); 
        while($info7 =mysqli_fetch_array($data7)){ 
         $art_name=$info7['articletext']; 
         $has_serial=$info7['has_serial']; 
        } 
    
        if ($has_serial = true){ 
         $i = 1; 
         while ($i <= $amount){ 
          mysqli_query($link,"INSERT INTO bookings (amount,article, articlename,BI_ID,user) VALUES ('$amount','$article','$art_name','$BI_ID','$user')"); 
          $i++; 
          } 
    
        } 
        else 
        { 
    
         mysqli_query($link,"INSERT INTO bookings (amount,article, articlename,BI_ID,user) VALUES ('$amount','$article','$art_name','$BI_ID','$user')"); 
        } 
    
    
    
    } 
    
    +3

    mysql을 사용할 때 매개 변수화 된 쿼리와 ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php)을 사용하여 쿼리에 사용자 데이터를 추가해야합니다 . ** 당신이 아마도 심각한 [SQL injection 버그] (http://bobby-tables.com/)를 만들 것이기 ​​때문에 ** 이것을 수행하기 위해 문자열 보간법을 사용하지 마십시오. – tadman

    답변

    4

    if 문이 잘못 작성되었습니다. $has_serial = true은 항상 true이므로 항상 $has_serial이 true와 같아 져서 평가됩니다.

    if ($has_serial = true){ 
    

    은 다음과 같아야합니다
    if ($has_serial == true){ 
    

    는 내가 다시 C/C++ 개발에 다른 변환에서 채택 워드 프레스 사본에서 좋은 규칙을 채택했다. 먼저 변수 같은를 CONST 식을 작성 :

    if(true == $has_serial) 
    

    인터프리터 대신 소스를 찾는 데 많은 시간이 걸릴 수 있습니다 예기치 않은 동작,의, 오류가 발생하는 실수를 할 경우이 방법. 나는 젊은 프로그래머 였을 때 이런 실수를하기까지 몇 시간을 낭비했다. 심지어 요즘은 나에게 낭비 인 몇 분 동안 머리를 쓰러 뜨릴 수도있다.

    +0

    '$ has_Serial'이 false 인 경우 문제점을 수정 해 주셔서 감사합니다. 그러나 쿼리가 작동하지 않을 때 사실은 작동하지 않습니다! – HKK

    +2

    @HKK'$ amount'는 음수이므로'while' 루프는 실행되지 않습니다. – jeroen

    +0

    쿼리의 입력 내용을 검사하여 일관성을 확인하십시오. @jeroen이 말한대로 while 루프도 확인하십시오. 'echo' 또는'print'로 값을 디버그하십시오. – Rolice

    관련 문제