2016-05-16 3 views
0

Я использую следующую функцию из CS50 2014, и она работает, когда я SELECT, но она не работает, когда я пытаюсь ОБНОВИТЬ. Вот запрос и функция:Функция обновления запроса не работает

query(
    "UPDATE users 
     SET pwtxt = ?, pass = ?, dt = ?, reset = ? 
     WHERE usr = ?", 
    NULL, 
    "compass", 
    NULL, 
    0, 
    1 
); 

function query(/* $sql [, ... ] */) 
{ 

    // SQL statement 
    $sql = func_get_arg(0); 

    // parameters, if any 
    $parameters = array_slice(func_get_args(), 1); 

    // try to connect to database 
    static $handle; 
    if (!isset($handle)) 
    { 
     try 
     { 
      // connect to database 
      $handle = new PDO("mysql:dbname=" . DATABASE . ";host=" . SERVER, USERNAME, PASSWORD); 

      // ensure that PDO::prepare returns false when passed invalid SQL 
      $handle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     } 
     catch (Exception $e) 
     { 
      // trigger (big, orange) error 
      trigger_error($e->getMessage(), E_USER_ERROR); 
      exit; 
     } 
    } 

    // prepare SQL statement 
    $statement = $handle->prepare($sql); 
    if ($statement === false) 
    { 
     // trigger (big, orange) error 
     // trigger_error($handle->errorInfo()[2], E_USER_ERROR); need to fix array issue 
     exit; 
    } 

    // execute SQL statement 
    $results = $statement->execute($parameters); 


    // return result set's rows, if any 
    if ($results !== false) 
    {  
     return $statement->fetchAll(PDO::FETCH_ASSOC); 
    } 
    else 
    {  
     return false; 
    } 
} 

ответ

0

не появляется вы можете больше не обновлять с NULLS

-1

Когда ваш обновляют строки, которые вы не можете использовать выборки методы. Вот почему он работает только с . Выберите запросов.

With PDO, how can I make sure that an UPDATE statement was successful?

Вы должны использовать ROWCOUNT метод, чтобы увидеть, как многие из них пострадали от вашего запроса. Кстати, я не думаю, что это хорошая идея, чтобы попытаться смешивать разные типы запросов только одним методом. Возвращаемые значения для a , a обновление, a вставка или удалить не совпадают. Вы не можете суммировать их в одной и той же функции.

Если вы хотите централизовать подключение к базе данных, я предлагаю вам создать дочерний класс PDO, где вы можете жестко закодировать свои учетные данные БД. Или вы можете создать глобальный объект PDO или лучше, используйте singleton. Таким образом, вы сможете использовать свой экземпляр PDO в любом месте, не дублируя ваши учетные данные БД все вокруг и используя собственные методы PDO для ваших приготовлений.

+0

Он использует только выборку, если результаты! = False. Обновление работает как написано, если вы удалите нули – DCR

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