Как выполнить SELECT и INSERT в одном запросе с PHP / MYSQL? - PullRequest
1 голос
/ 13 июля 2009

У меня есть таблица user_name с 3 полями, id, Name, Email (id - это auto_increment поле). Я хочу выполнить следующий запрос в PHP, но он не возвращает никакого результата.

INSERT INTO user_name (Name, Email) VALUES ('Example', 'example@xyz.com'); 
SELECT LAST_INSERT_ID() AS 'userid';

Когда я выполняю вышеуказанный запрос в PHP, как показано ниже, он ничего не возвращает.

$_SQL="INSERT INTO user_name (Name,Email) VALUES ('Example', 'example@xyz.com'); 
SELECT LAST_INSERT_ID() AS 'userid';";

$result_last_id = @mysql_query($_SQL);
$rs_insert = mysql_fetch_array($result_last_id);

$new_userid = $rs_insert['userid'];

Может кто-нибудь сказать, пожалуйста, как выполнить оба запроса в один.

Ответы [ 7 ]

8 голосов
/ 13 июля 2009

Посмотрите на функцию mysql_insert_id().

mysql_query($insertStatementOnly);
$new_userid = mysql_insert_id();
5 голосов
/ 13 июля 2009

Похоже, вам не нужно выполнять несколько запросов, но я включил, как это сделать ниже. То, что вы хотите, это последний вставленный идентификатор, который вы получаете от mysql_insert_id.

Для выполнения нескольких запросов

Из комментариев к документации mysql_query:

В документации утверждается, что "несколько запросов не поддерживаются".

Однако, кажется, что поддерживаются несколько запросов. Вам просто нужно передать флаг 65536 в качестве параметра 5 mysql_connect (client_flags). Это значение определено в /usr/include/mysql/mysql_com.h: #define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */

Выполненная с несколькими запросами одновременно, функция mysql_query будет возвращать результат только для первого запроса. Другие запросы также будут выполнены, но у вас не будет результатов для них.

Кроме того, взгляните на библиотеку mysqli, в которой есть метод multi_query .

1 голос
/ 16 апреля 2011

Да. Вы можете использовать команду Shell <BR> mysql -user -p -h база данных -e ' SQL ЗАЯВЛЕНИЕ 1; SQL ЗАЯВЛЕНИЕ 2; SQL ЗАЯВЛЕНИЕ 3; .......; «

Php / MYSQL Programmer

1 голос
/ 13 июля 2009

Если вы используете Zend Framework с базой данных MySQL, определенной в PDO, вы просто должны использовать:

$database=Zend_Db::factory('PDO_MySQL',Array('hostname'=>'localhost','username'=>'x','password'=>'y','dbname'=>'z');
$connectionHandle=$database->getConnection();
$rowsInserted=$connectionHandle->insert('database_name','INSERT INTO x (a,b) VALUES (c,d)');
if ($rowsInserted>0) {
 $autoIncrementValue=$connectionHandle->lastInsertId();
}
1 голос
/ 13 июля 2009

Могу ли я также предложить вам избежать оператора подавления ошибок '@' в mysql_query, поскольку вы можете не знать о каких-либо ошибках mysql. По крайней мере,

mysql_query($sql) or die("error: " . mysql_error()) ;
1 голос
/ 13 июля 2009

Простой ответ на самом деле: вы просто не можете этого сделать.

http://php.net/mysql_query

0 голосов
/ 15 сентября 2011

это может делать то, что вы хотите:

insert into table1 (Name,Emails) values ('qqq','www');
select max(id) as lastinserted from table1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...