====== MySQL =====
~~NOTOC~~
===== mysqli driver =====
== Specification ==
^Driver Name|mysqli|
^Data Provider|[[v5:userguide:learn_extensions:new_driver#Understanding The Data Provider|mysql]]|
^Status|Active((This driver is actively supported by ADOdb project members))|
^Windows|Yes|
^Unix|Yes|
^ADOdb V5|Yes|
^ADOdb V6|Yes|
== Alternatives ==
[[v5:database:pdo#pdo_mysql|PDO driver for MySQL]]
== See Also ==
[[v5:reference:connection:setconnectionparameter#mysql|setConnectionParameter()]]
** This is the preferred driver for connections to the following databases:**
* [[http://mysql.com|MySQL]]
* [[http://mariadb.com|MariaDB]]
* [[http://percona.com|Percona]]
This driver uses the PHP **mysqli** interface and supports all table types, with full support for transactions and rollback when the table type supports it.
It replaces [[v5:database:mysql_legacy|]] (**mysql**, **mysqlt** and **mysqlpo**).
Starting with ADOdb 5.22, the mysqli driver requires the [[https://www.php.net/manual/en/book.mysqlnd.php|MySQL Native Driver (Mysqlnd)]]
-------------------------------------------
===== Driver Specific Issues =====
==== renameColumnSql ====
The method [[v5:dictionary:renamecolumnsql|renameColumnSql]] normally takes 3 parameters, ''$tableName'',
''$oldColumnName'' and ''$newColumnName''. When used with the mysql provider, a full definition of the column must be provided, as if creating the column new
==== Usage ====
/*
* We are going to rename a column from col9 to col6.
*/
$flds = 'col6 C(50) NOTNULL DEFAULT "BILL"';
# Then create a data dictionary object, using this connection
$dict = NewDataDictionary($db);
$sql = $dict->renameColumnSql($table,'col9','col6', $flds);
==== Connecting With SSL ====
From ADOdb version 5.21, you can make an SSL connection to MySQL in the following way:
/*
* Enable ADOdb
*/
$db = newAdoConnection('mysqli');
/*
* Set the SSL parameters
*/
$db->ssl_key = "key.pem";
$db->ssl_cert = "cert.pem";
$db->ssl_ca = "cacert.pem";
$db->ssl_capath = null;
$db->ssl_cipher = null;
/*
* Open the connection
*/
$db->connect($host, $user, $password, $database);
==== Connecting To A Microsoft Azure MySQL Instance ====
/*
* Enable ADOdb
*/
$db = newAdoConnection('mysqli');
$database = 'employees';
$host = 'my-corporation.mysql.database.azure.com';
$user = 'corpuser';
$password = 'Qzrt6r55geRt!';
$db->ssl_ca = '/opt/azure-cert/DigiCertGlobalRootCA.crt.pem';
/*
* Open the connection
*/
$db->connect($host, $user, $password, $database);
==== Forcing emulated prepared statements ====
ADOdb 5.22 introduced support for "true" bound variables in prepared statements((using
[[https://www.php.net/manual/en/mysqli-stmt.execute.php|mysqli_stmt_execute()]],
see [[https://github.com/ADOdb/ADOdb/pull/655|issue #655]])).
Before that, parameterized queries were emulated, which was a potential security risk.
When using database engines pretending to be MySQL but not implementing prepared statements such as
[[https://clickhouse.com/|ClickHouse]] and
[[https://manticoresearch.com/|Manticore Search]],
it is possible((starting with ADOdb 5.22.8)) to force usage of emulated queries (i.e. reverting to behavior of ADOdb 5.21 and older) by setting the ''doNotUseBoundVariables'' property.
$db = newAdoConnection('mysqli');
$db->doNotUseBoundVariables = true;
$db->connect($host, $user, $password, $database);
$db->execute($sql, $param);
{{tag>[MySQL windows unix supported tier1]}}
{{htmlmetatags>metatag-keywords=(php, programming, database, mysql, percona, mariadb)}}