私はこのようにSQL $クエリを持っています。準備機能を使用してPDOで行を更新できないのはなぜですか?
UPDATE `tags` SET `tags.name` = :name,
`tags.slug` = :slug,
`tags.date_published` = :date_published,
`tags.meta_title` = :meta_title,
`tags.meta_description` = :meta_description,
`tags.meta_keywords` = :meta_keywords
WHERE `tags.id` = :id
そして、私の$値配列。
Array
(
[:name] => iphone
[:slug] => iphone
[:date_published] => 2016-03-27
[:meta_title] => iphone Yazıları
[:meta_description] => iphone hakkında son gelişmeler ve faydalı bilgiler.
[:meta_keywords] => iphone yazıları, iphone hakkında bilgiler, iphone haberleri
[:id] => 24
)
PDOの準備関数を使用して1つの行を更新しようとしています。
$sth = $this->db->prepare($query);
$sth->execute($values);
echo "affected rows: ".$sth->rowCount(); // prints 0
return $sth->rowCount() ? true : false;
エラーは発生しませんが、クエリの実行後に行は影響を受けません。私のミスはどこですか?
編集: 私はこのような値の配列を作成しています。
$params = array(
"id", "name", "slug", "date_published",
"meta_title", "meta_description", "meta_keywords");
$values = array();
foreach ($params as $key) {
@$values[$key] = $_POST[$key];
}
これは私がクエリを作成する方法です。
$query = "UPDATE `$table` SET";
$values = array();
/* Add field names and placeholders to query. */
foreach ($params as $key => $value) {
$query .= " `{$table}.{$key}` = :" . $key . ",";
$values[":" . $key] = $value;
}
/* Remove last comma. */
$query = substr($query, 0, -1);
/* Build where condition. */
if ($cond) {
$query .= " WHERE ";
foreach ($cond as $key => $value) {
$query .= " `{$table}.{$key}` = :" . $key . ",";
$values[":" . $key] = $value;
}
/* Remove last comma. */
$query = substr($query, 0, -1);
}
あなたの配列が奇妙に見えます。この配列を作成する場所にPHPコードを表示できますか? –
phpMyAdminを使用しているようです。行が実際に影響を受けていないことを(phpMyAdminで)確認しましたか?これは、問題がクエリーにあるのか、 'rowCount()'であるのかを判断するのに役立ちます。 – alexw
同じデータに更新している場合は、更新ヘップがないので、行数は0です。 –