2016-03-17 3 views
-1

Я создал класс, который расширяет функциональность PDO для взаимодействия с базой данных. До сих пор все не работает достаточно хорошо, но я не в состоянии выполнить update заявления ниже запрос:PDO не находит столбец

$result = $this->db->update('table1', $postData['parameters'], "code = {$postData['code']}"); 

массива postData есть это содержание:

$postData = array(
    "code" => "T941", 
    "parameters" => array("description" => "Testing") 
); 

update метод имеющегося в моем db класс, который расширяет PDO функции, заключается в следующем:

public function update($table, $data, $where) 
{ 
    ksort($data); 
    $fieldDetails = NULL; 

    foreach($data as $key => $value) 
    { 
     $fieldDetails .= "`$key`=:$key,"; 
    } 

    $fieldDetails = rtrim($fieldDetails, ","); 
    $sth = $this->prepare("UPDATE $table SET $fieldDetails WHERE $where"); 

    foreach($data as $key => $value) 
    { 
     $sth->bindValue(":$key", $value); 
    } 
    return $sth->execute(); 
} 

это мне ThOD всегда работал, но теперь я получаю эту ошибку:

Column not found: 1054 Unknown column 'T941' in 'where clause'

Теперь я пытался сбросить содержание update вроде этого:

1. echo $table; 
2. var_dump($data); 
3. echo $where; 

и я получаю:

1. table1 
2. array(2) { 
    ["code"]=> 
    string(4) "T941" 
    ["description"]=> 
    string(4) "Test" 
    } 
3. code = T941 

Проблема заключается в том, что метод update не имеет доступа к имени столбца, а по значению! Я действительно не знаю, почему, в других классах я использую его таким же образом и хорошо работаю.

Это table1 структура:

| code | description | lastUpdated | 

, что happean?

+0

'$ fieldDetails. =" '$ Key' =: $ key,"; 'должно быть' $ fieldDetails. = "$ Key =: $ key,"; ' –

+0

@Anant, и если мне нужно есть столбец с именем по умолчанию, занятым? Должен ли я добавлять кавычки, поэтому мне нужно использовать его на моем пути. Также я получаю ту же ошибку с вашим намеком. – Dillinger

ответ

1

Вы должны добавить кавычки здесь:

code = {$postData['code']} 

Изменить это:

code = '{$postData['code']}' 

Это простейший. Другим советом является использование bindValue для привязки параметров к переменной $ where variable.

+1

Это хотя бы синтаксическая ошибка. Проверьте свои кавычки. –

+0

Извините, я забыл сбежать от них. –

+0

@NikolayTomitov К сожалению, «PhpStorm» сказал мне «Ожидаемый» ', плохой синтаксис так. Я не думаю, что это проблема. Как я сказал в других классах, так же работает. – Dillinger

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