Предопределенные константы
Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение было подгружено во время выполнения.
Начиная с PHP 4.3.0 можно указать дополнительные клиентские флаги для функций mysql_connect() и mysql_pconnect() functions. Предопределены следующие константы:
Константа | Описание |
---|---|
MYSQL_CLIENT_COMPRESS |
Использовать протокол сжатия |
MYSQL_CLIENT_IGNORE_SPACE |
Разрешает использовать пробелы после имён функций |
MYSQL_CLIENT_INTERACTIVE |
Позволяет interactive_timeout секунд (вместо wait_timeout ) бездействия до закрытия соединения. |
MYSQL_CLIENT_SSL |
Использовать SSL-шифрование. Этот флаг доступен только начиная с версии 4.x клиентской библиотеки MySQL. Версия 3.23.x поставляется как в PHP 4, так и с бинарным дистрибутивом Windows в PHP 5. |
Функция mysql_fetch_array() использует константы для определения типа возвращаемого массива. Предопределены следующие константы:
Константа | Описание |
---|---|
MYSQL_ASSOC |
Результат возвращается в ассоциативном массиве с именами колонок в качестве индексов. |
MYSQL_BOTH |
Результат возвращается в массиве, содержащем как численные индексы, так и имена колонок в качестве индексов. |
MYSQL_NUM |
Результат возвращается в массиве, содержащем численные индексы. Индексы начинаются с 0 (0 содержит первую колонку). |
Коментарии
When you connect and expect to use a stored procedure,you must pass a special flag to MySQL via the connect command, otherwise you will not get the results returned, and it will result in this error:
PROCEDURE AlexGrim.GetStats_ForumCategories can't return a result set in the given context
To fix this, change you connection string, adding ",false,65536" as the last 2 fields:
$this->con = mysql_connect($this->h,$this->u,$this->p,false,65536);
Other client flags extracted from MySQL client source
#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
#define CLIENT_LONG_FLAG 4 /* Get all column flags */
#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
#define CLIENT_COMPRESS 32 /* Can use compression protocol */
#define CLIENT_ODBC 64 /* Odbc client */
#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */
#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
#define CLIENT_SSL 2048 /* Switch to SSL after handshake */
#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */
#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */
#define CLIENT_MULTI_STATEMENTS 65536 /* Enable/disable multi-stmt support */
#define CLIENT_MULTI_RESULTS 131072 /* Enable/disable multi-results */
#define CLIENT_REMEMBER_OPTIONS (((ulong) 1) << 31)
If you're using stored procedures and mysql_error() returns "PROCEDURE storedProcedureName can't return a result set in the given context", you need to pass an additional flag (CLIENT_MULTI_RESULTS) to mysql_connect() as such:
mysql_connect($hostname, $username, $password, true, 131072);
Some other sources say that you should use 65536. 65536 is actually the flag to allow multiple statements in a single mysql_query(), and is a security issue. The reason it allows you to receive results from stored procedures is because it implies 131072. To be safe, use 131072 over 65536.