2016-07-30 13 views
0

対応するIDが見つかるとブール値isHereをtrue(1) に設定する必要があるプロジェクトで作業しています。しかし、私はデータベースを更新するように見えることはできません。私はデータベースから選択することができます。PHP&MySql:データベースを更新できません

私には2つの問題があります。最初:

警告:

$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の::クエリ()パラメータ2が整数であると想定し、文字列を14

行14:

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

第二の問題: たとえI手動TYデータベース内にあるsmartRiderが更新されると、何も更新されません。

本当にありがとうございます。

+0

'expects integer'。それが何を意味するのか理解していますか? –

+0

そしてmysqli_queryマニュアルを参照してください。値を 'query()'に渡しても、それがあなたのクエリに追加されるわけではありません。 –

+0

はい、私は、SmartRiderIDがVarCharなので、わかりません。 – Marcel

答えて

0

- この関数の第2引数がint $resultmodeであることがわかります。

参照 - それはintです。その目的は、返された結果の構造を定義することです。したがって、$smartRiderquery()に渡すことは、役に立たないです。

queryファンクションは準備文で動作しません。プリペアドステートメントのために

prepare()です:​​の結果を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のCS50xライブラリに慣れていました。私は間違ってそれなしで動作すると仮定した。 – Marcel

-1

problem1:警告:mysqliの:: query()は、パラメータ2が整数であることを期待し、ライン上index.phに与えられた文字列14

ソリューション:あなたはmysqli_queryのマニュアルを参照している場合

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

これは安全ではありません。あなたの 'smartRider'に何でも追加し、素晴らしいSQLインジェクションを持ってください。 –

関連する問題