2016-07-30 6 views
0

해당 ID를 찾을 때 부울 값 isHere true (1) 을 설정해야하는 프로젝트에서 작업하고 있습니다. 그러나 데이터베이스를 업데이트 할 수 없습니다. 나는 데이터베이스에서 선택할 수 있습니다.PHP & MySql : 데이터베이스를 업데이트 할 수 없습니다.

두 가지 문제점이 있습니다. 첫째 :

경고 :

$handle = @fopen("../smartriders.txt", "r"); 

    if ($handle) 
     { 
     while (($smartRider = fgets($handle, 255)) !== false) 
     { 

      if($update = $conn->query("UPDATE members SET isHere = 1 WHERE SmartRiderID = ?", $smartRider)) 
      { 
       print("update successful"); 
      } 
     } 
     if (!feof($handle)) { 
      echo "Error: unexpected fgets() fail\n"; 
     } 
     fclose($handle); 
    } 

이 경고 산출 줄에 index.ph에 주어진 mysqli :: 쿼리() 매개 변수이 정수로 기대하고, 문자열을 14

라인 14 :

if($update = $conn->query("UPDATE members SET isHere = 1 WHERE SmartRiderID = ?", $smartRider)) 

두 번째 문제 : 하더라도 내가 수동으로 타이 데이터베이스에있는 smartRider, 아무것도 업데이트되지 않습니다.

도움이 될만한 의견이 있습니다.

+0

'expects integer'. 그게 무슨 뜻인지 알아? –

+0

mysqli_query 매뉴얼을 참조하십시오. 값을'query()'에 전달한다고해서 쿼리에 추가되는 것은 아닙니다. –

+0

예, 이해합니다. SmartRiderID가 VarChar이기 때문에 이해가 안되는 이유입니다. – Marcel

답변

0

-이 함수의 두 번째 인수는 int $resultmode입니다.

참조 - 참조 번호는 int입니다. 그리고 반환 된 결과의 구조를 정의하는 것이 목적입니다. 따라서 $smartRiderquery()으로 전달하면 쓸데없는입니다.

query 기능 은 준비된 문구가 포함되어 있지 않습니다. 준비된 명령문에 대한

prepare()입니다 : execute()의 결과를 cheking를 들어

$stmt = $mysqli->prepare('UPDATE members SET isHere = 1 WHERE SmartRiderID = ?'); 
$stmt->bind_param('s', $smartRider); 
$res = $stmt->execute(); 

http://php.net/manual/en/mysqli-stmt.execute.php를 참조하십시오.

+0

감사합니다. 저는 David Malan의 Harvard 's CS50x 라이브러리에 익숙했습니다. 내가했던 것을 허용합니다. 나는 그것이 그것 없이는 일할 것이라고 잘못 가정했다. – Marcel

-1

problem1 : 경고 : mysqli :: 쿼리() 매개 변수이 정수있을 것으로 기대 라인에 index.ph에 주어진 문자열 (14)

솔루션 : 당신이 mysqli_query 설명서를 참조하면

if($update = $conn->query("UPDATE members SET isHere = 1 WHERE SmartRiderID = " . $smartRider)) 
+0

이것은 안전하지 않습니다. 'smartRider'에 무엇이든 추가하고 멋진 SQL 인젝션을하십시오. –

관련 문제