Hallo,
Glaubst Du alles was im Handbuch steht?
Ich habe meine Aussage nicht am Handbuch festgemacht. Der Text im Handbuch sollte nur ein weiteres Indiz sein. Mit den mit PHP mitgelieferten, offiziellen MySQL-Erweiterungen ist es nicht möglich, mehrere Anfragen mit einem einzigen [phpf]mysql_query[/phpf]-Aufruf abzuarbeiten (zumindest nicht ohne Tricks, siehe weiter unten). Das hängt direkt mit der C-API von MySQL zusammen, welche von der MySQL-Extension verwendet wird. Da steht's dann auch nochmal in aller Deutlichkeit in der Dokumentation:
http://dev.mysql.com/doc/refman/4.1/en/mysql-query.html hat gesagt.:
17.2.3.49. mysql_query()
int mysql_query(MYSQL *mysql, const char *query)
Description
Executes the SQL query pointed to by the null-terminated string
query. Normally, the string must consist of a single SQL statement and you should not add a terminating semicolon (‘
;’) or
\g to the statement. If multiple-statement execution has been enabled, the string can contain several statements separated by semicolons. See
Section 17.2.9, “C API Handling of Multiple Statement Execution”.
http://dev.mysql.com/doc/refman/4.1/en/c-api-multiple-queries.html hat gesagt.:
17.2.9. C API Handling of Multiple Statement Execution
From version 4.1, MySQL supports the execution of multiple statements specified in a single query string. To use this capability with a given connection, you must specify the CLIENT_MULTI_STATEMENTS option in the flags parameter of mysql_real_connect() when opening the connection. You can also set this for an existing connection by calling mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON)
Zieht man nun zusätzlich noch den
Quellcode der aktuellen Version der MySQL-Erweiterung zu Rate, wird man feststellen, dass weder
CLIENT_MULTI_STATEMENTS noch
MYSQL_OPTION_MULTI_STATEMENTS_ON darin auftauchen.
Allerdings kann man seit PHP 4.3.0 beim Aufruf von [phpf]mysql_connect[/phpf] die „client flags“ von Hand setzen. Diese werden dann direkt zur C-Funktion
mysql_real_connect durchgereicht. Aus dem Quellcode der MySQL-API kann man dann noch rauslesen, dass
CLIENT_MULTI_STATEMENTS dem Wert 65536 entspricht. Baut man nun die Verbindung mit einem Aufruf wie bspw.
mysql_connect("host", "user", "pass", true, 65536); auf, dann (und nur dann) kann man auch mehrere Statements mit einem einzelnen [phpf]mysql_query[/phpf] abarbeiten lassen. Allerdings konnte ich das nur mit der aktuellen Version von PHP5 verifizieren – PHP4 liefert nachwievor die Meldung, dass ein Syntaxfehler in der SQL-Abfrage vorliege.
Grüße,
Matthias