0

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個の要素があります)

4

1 に答える 1

2

一重引用符は変数を補間しません。

$stmt->bindParam(':$value', $variable);

する必要があります

$stmt->bindParam(":$value", $variable);
于 2012-10-25T00:20:24.573 に答える