2014-02-20 6 views
0

У меня есть база данных mySQL, определенная с одной таблицей с большим количеством полей.Обновление одного поля в base64 всей таблицы с PDO

Есть все в одном операторе PDO я мог бы выполнить, чтобы сделать следующее:

Я хочу base64_encode одно поле (поле, называемое cstat) в каждой записи в БД.

Любая помощь будет высоко оценена.

UPDATE:

Благодаря TheEwook получать меня на правильном пути и некоторых дальнейших поисков я наконец-то решить это так (у меня есть уникальный автоинкремент поле под названием record_id):

$sth = $pdo->query("SELECT * FROM myTable"); 
    $sth->setFetchMode(PDO::FETCH_ASSOC); 

    while($row = $sth->fetch()) { 

     $cstat = base64_encode($row['cstat']); 

     $sql="UPDATE myTable SET cstat = :cstat WHERE record_id = :record_id"; 
     $stmt = $pdo->prepare($sql);         
     $stmt->bindParam(':cstat', $cstat, PDO::PARAM_STR); 
     $stmt->bindParam(':record_id', $row['record_id'], PDO::PARAM_INT); 
     $stmt->execute(); 

    } 

ответ

0

Простое обновление запрос будет достаточно

$sth = $dbh->prepare('UPDATE myTable SET cstat = TO_BASE64(cstat)'); 
$sth->execute(); 

Или, если вы используете версию MySQL до 5.6.1

$sth = $dbh->query("SELECT * FROM myTable"); 
$sth->setFetchMode(PDO::FETCH_ASSOC); 

while($row = $sth->fetch()) { 
    $cstat = base64_encode($row['cstat']); 
    $sth2 = $dbh->prepare('UPDATE myTable SET cstat = ?'); 
    $sth2->execute(array($cstat)); 
} 
+0

Спасибо за ответ, но он, похоже, не сработал. Я положил его в блок catch try и не сделал никаких ошибок. Также нет ошибок PHP в журнале. Затем я попробовал версию запроса с помощью PhpMyAdmin, и я получаю следующее сообщение об ошибке: # 1305 - ФУНКЦИЯ custdata_db.TO_BASE64 не существует –

+0

Можете ли вы сказать мне версию MySQL вы используете? – TheEwook

+0

Только что проверили с phpinfo(), и он возвращает: \t 5.1.71, а также просто прочитал, что функции base_64 были добавлены в 5.6 –

Смежные вопросы