PHP MySQL INSERT возвращаемое значение с одним выполнением запроса

есть ли что-нибудь возвращенное из MySQL/PHP при выполнении запроса вставки? Вот моя функция, которая у меня есть в классе.

function mysqlQuery($query) {
   // Gets the results from the query
   $results = mysql_query($query, $this->connection);

   // Loops through the queried results as an multi-dimensional array
   while($rows = mysql_fetch_array($results, MYSQL_ASSOC)) {
      // Push results to single array
      $rs[] = $rows;
   }

   // Return results as array
   return $rs;
}

вот как я называю функцию

$rs = $dbh->mysqlQuery($query);

но выполнение запроса вставки $rs ничего не возвращает. Нужна ли моей функции помощь или это поведение по умолчанию? Любые советы также были бы полезны.

DUH, спасибо, что напомнил мне, что он возвращает TRUE/FALSE. по какой-то причине он был у меня в голове, он действительно вернулся. другое значение, но после просмотра моей функции я вижу, что я не проверяю условие TRUE/FALSE и только перебираю массив результатов.

Спасибо за все правильные ответы, но сначала, чтобы ответить правильно получил очки, ура!

6 ответов


INSERT просто возвращает true или false. чтобы на самом деле вернуть что-то полезное, вам понадобится SELECT или аналогичный запрос. нет результата для извлечения с помощью INSERT.


из документации php:

Возвращаемые Значения Для SELECT, показать, описать, объяснить и другие утверждения, возвращающие resultset,mysql_query() возвращает ресурс при успешном выполнении или FALSE при ошибке.

для другого типа операторов SQL,INSERT, UPDATE, DELETE, DROP, etc,mysql_query() возвращает TRUE или FALSE по ошибки.

возвращаемый ресурс результата должен быть передан в mysql_fetch_array() и другие функции для работы с результатом таблицы, чтобы получить доступ к возвращенным данным.

использовать mysql_num_rows() чтобы узнать, сколько строк было возвращено для SELECT statement или mysql_affected_rows() чтобы узнать, сколько строк были затронуты DELETE, INSERT, REPLACE или UPDATE statement.

mysql_query() также потерпит неудачу и вернется FALSE если у пользователя нет разрешения на доступ к таблицам, на которые ссылается запрос.


от php.net http://us2.php.net/mysql_query

для SELECT, SHOW, DESCRIBE, EXPLAIN и другие заявления, возвращающиеся resultset, mysql_query () возвращает ресурс на успех или FALSE на ошибка.

для другого типа операторов SQL, Вставка, обновление, удаление, падение и т. д, mysql_query () возвращает TRUE при успешном выполнении или FALSE по ошибке.


Как правило, когда разработчики создают домашние функции для управления запросами, они используют два метода. Один, "запрос", используемый для выбора и co, и один," exec", другие вставки, обновления и другие (например, в расширении PDO).

Если вы хотите сохранить свою функцию, добавьте оператор IF вокруг цикла, проверяющего тип $results (с is_resource() например)


в приведенном ниже примере я добавляю в свое предложение insert "returning" вместе с первичным ключом моей таблицы, затем после выполнения я делаю выборку, получая массив со значением последнего вставленного идентификатора.

<?php 
    public function insert($employee){ 

        $sqlQuery = "INSERT INTO employee(user_id,name,address,city) VALUES(:user_id,:name,:address,:city) RETURNING employee_id"; 

        $statement = $this->prepare($sqlQuery); 

        $a ="2002-03-11 12:01AM" ; 

        $statement->bindParam(":user_id", $employee->getUserId(), PDO::PARAM_INT); 
        $statement->bindParam(":name", $employee->getName(), PDO::PARAM_STR); 
        $statement->bindParam(":address", $employee->getAddress(), PDO::PARAM_STR); 
        $statement->bindParam(":city", $employee->getCity(), PDO::PARAM_STR); 
        $statement->execute(); 

        $result = $statement->fetch(PDO::FETCH_ASSOC); 
        return $result["employee_id"]; 

    } 
?>

источник


хотя это очень старая тема, она по-прежнему актуальна. И тем, кто наткнется на это (как я), не сдавайтесь! Есть варианты. На самом деле,см. этот ответ на SO

кроме того, для sqli и pdo, посмотреть этот

по сути, оператор insert, за которым следует одна из функций, перечисленных в этих ответах, даст вам идентификатор последней записи.