Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

mysqlnd_ms_query_is_select(3) [php man page]

MYSQLND_MS_QUERY_IS_SELECT(3)						 1					     MYSQLND_MS_QUERY_IS_SELECT(3)

mysqlnd_ms_query_is_select - Find whether to send the query to the master, the slave or the last used MySQL server

SYNOPSIS
int mysqlnd_ms_query_is_select (string $query) DESCRIPTION
Finds whether to send the query to the master, the slave or the last used MySQL server. The plugins built-in read/write split mechanism will be used to analyze the query string to make a recommendation where to send the query. The built-in read/write split mechanism is very basic and simple. The plugin will recommend sending all queries to the MySQL replication master server but those which begin with SELECT, or begin with a SQL hint which enforces sending the query to a slave server. Due to the basic but fast algorithm the plugin may propose to run some read-only statements such as SHOW TABLES on the replication master. PARAMETERS
o $query - Query string to test. RETURN VALUES
A return value of MYSQLND_MS_QUERY_USE_MASTER indicates that the query should be send to the MySQL replication master server. The function returns a value of MYSQLND_MS_QUERY_USE_SLAVE if the query can be run on a slave because it is considered read-only. A value of MYSQLND_MS_QUERY_USE_LAST_USED is returned to recommend running the query on the last used server. This can either be a MySQL replication master server or a MySQL replication slave server. If read write splitting has been disabled by setting mysqlnd_ms.disable_rw_split, the function will always return MYSQLND_MS_QUERY_USE_MASTER or MYSQLND_MS_QUERY_USE_LAST_USED. EXAMPLES
Example #1 mysqlnd_ms_query_is_select(3) example <?php function is_select($query) { switch (mysqlnd_ms_query_is_select($query)) { case MYSQLND_MS_QUERY_USE_MASTER: printf("'%s' should be run on the master. ", $query); break; case MYSQLND_MS_QUERY_USE_SLAVE: printf("'%s' should be run on a slave. ", $query); break; case MYSQLND_MS_QUERY_USE_LAST_USED: printf("'%s' should be run on the server that has run the previous query ", $query); break; default: printf("No suggestion where to run the '%s', fallback to master recommended ", $query); break; } } is_select("INSERT INTO test(id) VALUES (1)"); is_select("SELECT 1 FROM DUAL"); is_select("/*" . MYSQLND_MS_LAST_USED_SWITCH . "*/SELECT 2 FROM DUAL"); ?> The above example will output: INSERT INTO test(id) VALUES (1) should be run on the master. SELECT 1 FROM DUAL should be run on a slave. /*ms=last_used*/SELECT 2 FROM DUAL should be run on the server that has run the previous query SEE ALSO
Predefined Constants, user filter .Runtime configuration, mysqlnd_ms.disable_rw_split, mysqlnd_ms.enable. PHP Documentation Group MYSQLND_MS_QUERY_IS_SELECT(3)

Check Out this Related Man Page

MYSQLND_MS_GET_LAST_GTID(3)						 1					       MYSQLND_MS_GET_LAST_GTID(3)

mysqlnd_ms_get_last_gtid - Returns the latest global transaction ID

SYNOPSIS
string mysqlnd_ms_get_last_gtid (mixed $connection) DESCRIPTION
Returns a global transaction identifier which belongs to a write operation no older than the last write performed by the client. It is not guaranteed that the global transaction identifier is identical to that one created for the last write transaction performed by the client. PARAMETERS
o $connection - A PECL/mysqlnd_ms connection handle to a MySQL server of the type PDO_MYSQL, mysqli> or ext/mysql. The connection handle is obtained when opening a connection with a host name that matches a mysqlnd_ms configuration file entry using any of the above three MySQL driver extensions. RETURN VALUES
Returns a global transaction ID (GTID) on success. Otherwise, returns FALSE. The function mysqlnd_ms_get_last_gtid(3) returns the GTID obtained when executing the SQL statement from the fetch_last_gtid entry of the global_transaction_id_injection section from the plugins configuration file. The function may be called after the GTID has been incremented. NOTES
Note mysqlnd_ms_get_last_gtid(3) requires PHP >= 5.4.0 and PECL mysqlnd_ms >= 1.2.0. Internally, it is using a mysqlnd library C func- tionality not available with PHP 5.3. Please note, all MySQL 5.6 production versions do not provide clients with enough information to use GTIDs for enforcing session consistency. In the worst case, the plugin will choose the master only. EXAMPLES
Example #1 mysqlnd_ms_get_last_gtid(3) example <?php /* Open mysqlnd_ms connection using mysqli, PDO_MySQL or mysql extension */ $mysqli = new mysqli("myapp", "username", "password", "database"); if (!$mysqli) /* Of course, your error handling is nicer... */ die(sprintf("[%d] %s ", mysqli_connect_errno(), mysqli_connect_error())); /* auto commit mode, transaction on master, GTID must be incremented */ if (!$mysqli->query("DROP TABLE IF EXISTS test")) die(sprintf("[%d] %s ", $mysqli->errno, $mysqli->error)); printf("GTID after transaction %s ", mysqlnd_ms_get_last_gtid($mysqli)); /* auto commit mode, transaction on master, GTID must be incremented */ if (!$mysqli->query("CREATE TABLE test(id INT)")) die(sprintf("[%d] %s ", $mysqli->errno, $mysqli->error)); printf("GTID after transaction %s ", mysqlnd_ms_get_last_gtid($mysqli)); ?> SEE ALSO
Global Transaction IDs. PHP Documentation Group MYSQLND_MS_GET_LAST_GTID(3)
Man Page