Есть ли что-нибудь, возвращаемое из MySQL / PHP при выполнении запроса INSERT? Вот моя функция, которую я имею в классе.
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);
Но выполнение запроса INSERT $ rs ничего не возвращает. Мне нужна моя функция или это поведение по умолчанию? Любые советы также будут полезны.
DUH, спасибо, что напомнил мне, что он возвращает TRUE / FALSE. по какой-то причине у меня это было в голове, это фактически вернуло другое значение, но, посмотрев на мою функцию, я вижу, что я не проверяю условие TRUE / FALSE и перебираю только массив результатов.
Спасибо за все правильные ответы, но сначала, чтобы правильно ответить, получили очки, ура!
INSERT возвращает true или false. чтобы действительно вернуть что-то полезное, вам понадобится SELECT или подобный запрос. нет результата для получения с помощью INSERT.
Из документации php:
Возвращаемые значения Для SELECT
, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих mysql_query()
, mysql_query()
возвращает ресурс с успехом или FALSE при ошибке.
Для других типов операторов SQL INSERT
, UPDATE
, DELETE
, DROP
и т. Д. mysql_query()
возвращает TRUE
при успешном mysql_query()
или FALSE
при ошибке.
mysql_fetch_array()
ресурс результата должен быть передан mysql_fetch_array()
и другим функциям для обработки таблиц результатов для доступа к возвращенным данным.
Используйте mysql_num_rows()
чтобы узнать, сколько строк было возвращено для SELECT statement
или mysql_affected_rows()
чтобы узнать, сколько строк было затронуто mysql_affected_rows()
DELETE
, INSERT
, REPLACE
или UPDATE statement.
mysql_query()
также выйдет из строя и вернет FALSE
если у пользователя нет разрешения на доступ к таблицам, на которые ссылается запрос.
От php.net http://us2.php.net/mysql_query
Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query () возвращает ресурс с успехом или FALSE при ошибке.
Для других типов операторов SQL INSERT, UPDATE, DELETE, DROP и т. Д. Mysql_query () возвращает TRUE при успешном завершении или FALSE при ошибке.
Как правило, когда разработчики создают домашние функции для манипулирования запросами, они используют два метода. Один, «запрос», используемый для SELECT и co, и один, «exec», другие INSERT, UPDATE и другие (например, в расширении PDO).
Если вы хотите сохранить свою функцию, добавьте оператор IF вокруг цикла, проверяя тип $ results (например, с is_resource ())
В приведенном ниже примере я добавляю к моему предложению «возвращение» вместе с первичным ключом моей таблицы, а затем после выполнения, я делаю выборку, получая массив со значением последнего вставленного id.
<?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"]; } ?>
Источник