MySQLデータベース内のレコードを更新しようとしています。
配列/ループを使用してプリペアドステートメントを作成します。
$sql = "UPDATE table01 SET ";
foreach($values as $value)
{
$sql .="$value = :$value, ";
}
$sql = rtrim($sql,', ');
$sql .=" WHERE id = '$id'";
それから私はこの声明を準備します:
try
{
$pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare($sql);
次に、プリペアドステートメントの各トークン/プレースホルダーを、別のループを使用して挿入される値にバインドします。
foreach(array_combine($values, $variables) as $value=>$variable)
{
$stmt->bindParam(':$value', $variable);
}
$stmt->execute();
ここで、$ valuesはデータベース内の列ヘッダーの配列であり(したがって、「:$ value」はそれらに対応するトークン名のセットです)、$variablesは格納されるデータを含む変数の配列です。
これを実行すると、次のエラーが発生します。
Error: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
しかし、ご覧のとおり、配列からそれらを形成しています-要素が1:1に一致することを確認するために配列をカウントしましたが、次のようになります。
ご参考までに:
$count1 = count($values);
$count2 = count($variables);
echo $count1;
echo $count2;
与える:7575
(どちらにも75個の要素があります)