0
我需要幫助在PDO中一次更新多行。爲此,我使用UPDATE SET CASE WHEN
,但我在將值綁定到位置佔位符時非常困惑。假設我$_POST
內容是這樣的:當在PDO中使用大小寫更新多行時,參數號無效
$ _ POST [ 「TID」]:
Array
(
[0] => 383
[1] => 386
)
$ _ POST [ 「時代」]:
Array
(
[0] => 45
[1] => 30
)
然後$ SQL應該是:
UPDATE `person` SET age = CASE
WHEN user_id = ? AND tid = ? THEN ?
WHEN user_id = ? AND tid = ? THEN ?
ELSE `age` END
下面的代碼給我這個錯誤
[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
我期待產生這樣的正確的號碼綁定變量:
$users->bindValue(1, $_SESSION["user_id"]);
$users->bindValue(2, 383);
$users->bindValue(3, 45);
$users->bindValue(4, $_SESSION["user_id"]);
$users->bindValue(5, 386);
$users->bindValue(6, 30);
這有什麼錯用下面的代碼?
try
{
$dbh = new PDO("mysql:host=$hostname;dbname=$databasename", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$tid = $_POST["tid"];
$age = $_POST["age"];
$count = count($tid);
for($i=0;$i<$count;$i++)
{
$wa .= " WHEN user_id = ? AND tid = ? THEN ?";
}
$sql = "UPDATE `person` SET `age` = CASE $wa ELSE `age` END";
$users = $dbh->prepare($sql);
for($i=1;$i<$count;$i+=3)
{
$users->bindValue($i, $_SESSION["user_id"]);
}
$j = 2;
foreach($tid as $t)
{
$users->bindValue($j, $t);
$j+=3;
}
$k = 3;
foreach($age as $a)
{
$users->bindValue($k, $a);
$k+=3;
}
$users->execute();
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
確實沒有「的foreach」工作方式的代碼? – Bulat 2014-08-29 09:58:13