DBを介してスクリプトを検索し、壊れたリンクを修正します。検索と置換の機能はうまくいきますが、更新されたデータスクリプトを保存しようとすると、最初の未処理のデータだけが表示されます。私はこっそりしている!私は単純なmysql_queryコマンドを使ってデータを更新することができますが、PDOが必要です...PHP PDOはforeachループでレコードを更新できません
header('Content-Type: text/html; charset=UTF-8');
error_reporting(E_ALL);
echo "Welcome";
$mysql = new PDO('mysql:host=localhost;dbname=db_name;charset=UTF-8','user','12345');
if (!$mysql) die('Can\'t connect');
$tables = array(
'categories',
'news',
'pages'
);
function getContent($table) {
global $mysql;
$fieldnum = 0;
$fields = array();
$vals = array();
$st = $mysql->query("SHOW FIELDS FROM `{$table}`");
while ($row = $st->fetch(PDO::FETCH_ASSOC)) {
$fields[$fieldnum]=$row["Field"];
$fieldnum++;
}
$totalfields=$fieldnum;
$res = $mysql->query("SELECT * FROM `{$table}`");
$sql = "UPDATE `:table` SET :field = ':val' WHERE `:idf` = :id;";
while ($row = $res->fetch(PDO::FETCH_NUM)) {
for ($j=0; $j<$res->columnCount();$j++) {
$rs = str_replace('index.php/','',$row[$j],$m);
if ($rs && $m>0) {
if ($table == 'categories')
$prim= 'cat_id';
elseif($table == 'news') $prim= 'news_id';
elseif($table == 'pages') $prim= 'page_id';
else $prim= $table.'_id';
$upd = $mysql->prepare($sql);
$update = $upd->execute(array(
':table'=>$table,
':field'=>$fields[$j],
':val'=>$rs,
':idf'=>$prim,
':id'=>$row[0]
));
}
}
}
}
foreach ($tables as $t) {
getContent($t);
}
修正するのに手助けが必要です!一度だけExample #2
....
$res = $mysql->query("SELECT * FROM `{$table}`");
$rows = $res->fetchAll(PDO::FETCH_NUM);
$sql = "UPDATE `:table` SET :field = ':val' WHERE `:idf` = :id;";
$upd = $mysql->prepare($sql);
foreach ($rows as $row) {
foreach ($row as $col_name => $value) {
......
間違いはありますか? – Subdigger
'$ mysql = new PDO( 'mysql:host = localhost; dbname = db_name; charset = UTF-8)行の後に' $ mysql-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION);を追加できますか? '、' user '、' 12345 '); 'それが何を言っているのか教えてください。 – Arkh
@Zhlobopotam私はこの問題を長年前に受けており、pdoは2つのオープンされたクエリをサポートしたくありません...最初に閉じるか、fetchAllを他のものと操作する必要があります – Subdigger