1--TEST-- 2mysqli_options() 3--EXTENSIONS-- 4mysqli 5--SKIPIF-- 6<?php 7require_once 'skipifconnectfailure.inc'; 8 9?> 10--FILE-- 11<?php 12require_once 'connect.inc'; 13 14$link = mysqli_init(); 15 16/* set it twice, checking if memory for the previous one is correctly freed */ 17mysqli_options($link, MYSQLI_SET_CHARSET_NAME, "utf8"); 18mysqli_options($link, MYSQLI_SET_CHARSET_NAME, "latin1"); 19 20// print "run_tests.php don't fool me with your 'ungreedy' expression '.+?'!\n"; 21var_dump("MYSQLI_READ_DEFAULT_GROUP", mysqli_options($link, MYSQLI_READ_DEFAULT_GROUP, 'extra_my.cnf')); 22var_dump("MYSQLI_READ_DEFAULT_FILE", mysqli_options($link, MYSQLI_READ_DEFAULT_FILE, 'extra_my.cnf')); 23var_dump("MYSQLI_OPT_CONNECT_TIMEOUT", mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 10)); 24var_dump("MYSQLI_OPT_LOCAL_INFILE", mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, 1)); 25var_dump("MYSQLI_INIT_COMMAND", mysqli_options($link, MYSQLI_INIT_COMMAND, array('SET AUTOCOMMIT=0', 'SET AUTOCOMMIT=1'))); 26 27if (!$link2 = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { 28 printf("[006] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 29 $host, $user, $db, $port, $socket); 30} 31 32if (!$res = mysqli_query($link2, "SHOW CHARACTER SET")) { 33 printf("[010] Cannot get list of available character sets, [%d] %s\n", 34 mysqli_errno($link2), mysqli_error($link2)); 35} 36 37$charsets = array(); 38while ($row = mysqli_fetch_assoc($res)) { 39 $charsets[] = $row; 40} 41mysqli_free_result($res); 42mysqli_close($link2); 43 44foreach ($charsets as $charset) { 45 /* The server currently 17.07.2007 can't handle data sent in ucs2 */ 46 /* The server currently 16.08.2010 can't handle data sent in utf16 and utf32 */ 47 /* As of MySQL 8.0.28, `SHOW CHARACTER SET` contains utf8mb3, but that is not yet supported by mysqlnd */ 48 if ($charset['Charset'] == 'ucs2' || $charset['Charset'] == 'utf16' || $charset['Charset'] == 'utf32' || $charset['Charset'] == 'utf8mb3') { 49 continue; 50 } 51 if (true !== mysqli_options($link, MYSQLI_SET_CHARSET_NAME, $charset['Charset'])) { 52 printf("[009] Setting charset name '%s' has failed\n", $charset['Charset']); 53 } 54} 55 56var_dump("MYSQLI_READ_DEFAULT_GROUP", mysqli_options($link, MYSQLI_READ_DEFAULT_GROUP, 'extra_my.cnf')); 57var_dump("MYSQLI_READ_DEFAULT_FILE", mysqli_options($link, MYSQLI_READ_DEFAULT_FILE, 'extra_my.cnf')); 58var_dump("MYSQLI_OPT_CONNECT_TIMEOUT", mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 10)); 59var_dump("MYSQLI_OPT_LOCAL_INFILE", mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, 1)); 60var_dump("MYSQLI_INIT_COMMAND", mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT=0')); 61 62/* mysqli_real_connect() */ 63var_dump("MYSQLI_CLIENT_SSL", mysqli_options($link, MYSQLI_CLIENT_SSL, 'not a mysqli_option')); 64 65mysqli_close($link); 66 67echo "Link closed\n"; 68try { 69 mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT=1'); 70} catch (Error $exception) { 71 echo $exception->getMessage() . "\n"; 72} 73 74mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 75$link = mysqli_init(); 76 77// test for error reporting - only mysqlnd reports errors 78try { 79 mysqli_options($link, MYSQLI_SET_CHARSET_NAME, "foobar"); 80} catch (mysqli_sql_exception $e) { 81 echo $e->getMessage() . "\n"; 82} 83 84// invalid options do not generate errors 85mysqli_options($link, -1, "Invalid option"); 86 87print "done!"; 88?> 89--EXPECTF-- 90%s(25) "MYSQLI_READ_DEFAULT_GROUP" 91bool(true) 92%s(24) "MYSQLI_READ_DEFAULT_FILE" 93bool(true) 94%s(26) "MYSQLI_OPT_CONNECT_TIMEOUT" 95bool(true) 96%s(23) "MYSQLI_OPT_LOCAL_INFILE" 97bool(true) 98 99Warning: Array to string conversion in %s on line %d 100%s(19) "MYSQLI_INIT_COMMAND" 101bool(true) 102%s(25) "MYSQLI_READ_DEFAULT_GROUP" 103bool(true) 104%s(24) "MYSQLI_READ_DEFAULT_FILE" 105bool(true) 106%s(26) "MYSQLI_OPT_CONNECT_TIMEOUT" 107bool(true) 108%s(23) "MYSQLI_OPT_LOCAL_INFILE" 109bool(true) 110%s(19) "MYSQLI_INIT_COMMAND" 111bool(true) 112%s(17) "MYSQLI_CLIENT_SSL" 113bool(false) 114Link closed 115mysqli object is already closed 116Unknown character set 117done! 118