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, за которым следует одна из функций, перечисленных в этих ответах, даст вам идентификатор последней записи.