2012-03-12 6 views
1

fetch_arrayには簡単な問題があります。私はテーブルAからx1とx2を読み取るのが好きです。両方の配列は、別のテーブルBに+1するための別のフィールドを設定するカウンタが必要です。私は次のコードを書いたが、それはうまくいかないし、どこが間違っているのか分からない。多分誰かが私を助けることができます。どうもありがとう。fetch_arrayで配列を取得する方法

$get_counter = "SELECT x1, x2 FROM tablename(A) WHERE id='$id'"; 
     $result2 = mysqli_query($db, $get_counter); 

     $row = $result2->fetch_array(MYSQLI_ASSOC); 

     $counter = "UPDATE tablename(B) SET xy=xy + 1 WHERE x1=$row["x1"] AND x2=$row["x2"]"; 
     $result3 = mysqli_query($db, $counter); 
+0

どうしたらうまくいかないのですか? – hakre

+0

'tablename(A)、tablename(B)'は有効な構文ではないので、ここでは単にプレースホルダです。 –

答えて

1
 

$counter = "UPDATE tablename(B) SET xy=xy + 1 WHERE x1='".$row["x1"]."' AND x2 ='".$row["x2"]."'"; 
 
+0

こんにちは、私を助けてくれてありがとう。私はそれを働かせるにはそのようにしなければならなかった。あなた方全員に感謝します。ご多幸を祈る – John

2

$counterで引用が間違っています。 {}の二重引用符で囲まれた文字列の中に配列やオブジェクトを囲むのが良い方法です(時には必要です)。あなたは2番目のクエリ内からわきx1, x2を使用する予定がない場合は

$counter = "UPDATE tablename(B) SET xy = (xy + 1) WHERE x1={$row['x1']} AND x2={$row['x2']}"; 

しかし、あなたは1つのクエリとJOINでこれを行うことができます。これにより、最初の照会およびフェッチ・コールの必要性がなくなります。

UPDTE 
tablenameb B JOIN tablenamea A ON B.x1 = A.x1 AND B.x2 = A.x2 
SET xy = (xy + 1) 
WHERE A.id='$id' 
1

SQLにはエラーがあり、スクリプトはSQLエラーをチェックしません。

この:

$row = $result2->fetch_array(MYSQLI_ASSOC); 

は次のようになります。

if ($result2 === false) { 
    printf("Invalid query: %s\nWhole query: %s\n", mysqli_error(), $get_counter); 
    exit(); 
} 

$row = $result2->fetch_array(MYSQLI_ASSOC); 

$結果2をここでチェックされ、それが失敗した場合はどのようにSQLエラーが印刷される方法を参照してください。

+0

私はそれをすべてのクエリに追加しました。最終的にresult3のミスを表示していました。どうもありがとう。 – John

+0

それはあなたを助けてくれてうれしいです。[質問を閉じる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – jpic

関連する問題