обновить Zend DB с несколькими где - PullRequest
1 голос
/ 29 ноября 2011

Что-то не так с моим запросом, когда я получаю фатальную ошибку.

$select = $db->select()
    ->from('test', '*')
    ->where('user_id = ?', 1)
    ->where('url is NULL');
$Details = $db->fetchAll($select);

foreach ($Details as $row1) {
    $PublicId = $row1['public_id'];
    $data = array('password' => $randomString , 'flag' => 1);

    $db->update("test", $data, 'public_id =' . $PublicId);
    $pass = $row1['password']; 
}

Ошибка:

Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец« wdefabcghbcla45 »в« предложении where »в C: \ xampp \ php \ PEAR \ Zend \ Db \ Statement \ Pdo.php: 228 Трассировка стека: # 0 C: \ xampp \ php \ PEAR \ Zend \ Db \ Statement \ Pdo.php (228): PDOStatement-> execute (Array) # 1 C: \ xampp \ php \ PEAR \ Zend \ Db \ Statement.php (300): Zend_Db_Statement_Pdo -> _ execute (Array) # 2 C: \ xampp \ php \ PEAR \ Zend \ Db \ Adapter \ Abstract.php (479): Zend_Db_Statement-> execute (Array) # 3 C: \ xampp \ php \ PEAR \ Zend \ Db \ Adapter \ Pdo \ Abstract.php (238): Zend_Db_Adapter_Abstract-> query ('UPDATE test ...', Array) # 4 C: \ xampp \ php \ PEAR \ Zend \ Db \ Adapter \ Abstract.php (634): Zend_Db_Adapter_Pdo_Abstract-> query ('UPDATE test ...', Array) # 5 D: \ Zend Workspace \ Test \ testDelete.php (39) : Zend_Db_Adapter_Abstract-> update ('test', Array, 'test_public_id ...') # 6 {main} Следующее исключение 'Zend_Db_Statement_Exception' с сообщением 'SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец' wdefabcghbcla45 'в' где пункт '' я n C: \ xampp \ php \ PEAR \ Zend \ Db \ Statement \ in C: \ xampp \ php \ PEAR \ Zend \ Db \ Statement \ Pdo.php в строке 234

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

Проблема в том, что ваше предложение WHERE заканчивалось как WHERE public_id = wdefabcghbcla45, поэтому MySQL пытался "wdefabcghbcla45" как столбец вместо значения .Вы должны заключить его в кавычки (одинарные или двойные .. не имеет значения).

Попробуйте так:

$where = $db->quoteInto('public_id = ?', $PublicId);
$db->update('test', $data, $where);

http://files.zend.com/help/Zend-Framework/zend.db.html#zend.db.adapter.quoting.quote-into

1 голос
/ 29 ноября 2011

Попробуйте как

$data = array('password' => $randomString , 'flag' => 1);
$db->update( "test", $data, 'public_id ='.$PublicId );
0 голосов
/ 30 ноября 2011

Когда я пытался так, это работало. Спасибо за помощь.

$data = array('password' => $randomString , 'flag' => 1);
$where = "public_id = '" . $PublicId."'";
$db->update( "test", $data, $where );
...