1

where句で配列変数を使用する方法を理解しようとしています。

$ deaderをエコーすると、23,25,43,56,31,24,64,34、ectが表示されます。これらは更新したいID番号です。

$sql = mysql_query("UPDATE users SET dead='DEAD' WHERE userID ='(".$deader.")' ");

配列$deaderにはid番号の複数の値があり、$ deader配列の最初のid#のみが機能して更新されます。

Implodeが必要なものだと読んでいますが、機能的な形式にする方法がわかりません。

4

4 に答える 4

4

使用するWHERE ... IN

$sql = mysql_query("UPDATE users SET dead='DEAD' WHERE userID IN (".$deader.")");

$deader はコンマ区切り形式です。(例: $deader = '143, 554, 32')

配列の場合は、$deader = implode(',', $deader);カンマ区切りにするために使用できます。


: 新しいコードに mysql_* 関数を使用するのはやめてください。関数はもはや維持されておらず、コミュニティは非推奨プロセスを開始しています。これを PDO に変換する方法の詳細については、こちらを参照してください:動的に構築された ext/mysql クエリを PDO 準備済みステートメントに変換するにはどうすればよいですか? (PeeHaa のおかげで)

于 2012-09-12T19:43:47.877 に答える
1

$deader何らかの値の文字列の場合は、MySQL 条件を使用する必要がありますIN()。このような

UPDATE users SET dead = 'DEAD" WHERE userID IN ('?', '?', '?')

あなたの価値観はどこ?にありますか。userID が INTEGER フィールドの場合は、値を囲む単一引用符を省略できます。文字列フィールドの場合は必須です。

于 2012-09-12T19:45:26.130 に答える
0

あなたが探しているのは、SQL の IN キーワードだと思います。

UPDATE users set dead='DEAD' where userID in (100,101,102)
于 2012-09-12T19:44:38.667 に答える
-1

mysql_* の代わりに MySQLi を使用する

require_once('.dbase'); //contains db constants DB_NAME, DB_USER etc
//using PHP built in connection class mysqli

$mysqli = new mysqli(DB_HOST,DB_UNAME,DB_UPWORD,DB_NAME);

if ($mysqli->connect_errno){
    $err = urlencode("Failed to open database connection: ".$mysqli->connect_error);
    header("Location: error.php?err=$err");
exit();
    }
$deader=implode(',',$deader); //assumes array, sting "143,554,32"
if ($stmt = $mysqli->prepare("UPDATE users SET dead='DEAD' WHERE userID IN (?)"){
    //bind variable to statement object
    $stmt->bind_param('s',$deader) //var type[string],var to bind
    //execute query
    $stmt->execute();
    //feedback
    $rowsAffected = $stmt->affected_rows(); //update doesn't return a result set.
    //close statement object
    $stmt->close();
}
$mysqli->close();

あなたたちは mysql_* を使用するために Rickos を叩いていますが、それ以外の方法を説明していません。私のポイントは単に mysqli の使用方法を示すことでした。準備済みステートメントは必要ありませんが、私のコメントを準備済みステートメントとして表示しないとマークしたので (peehaa)、ここでは準備済みステートメントとして編集します。そして、それは彼の質問に答えます。

于 2012-09-12T20:02:11.180 に答える