ID:               48293
 Comment by:       carsten_sttgt at gmx dot de
 Reported By:      aaa_whoknows_me at list dot ru
 Status:           Feedback
 Bug Type:         MySQL related
 Operating System: Windows
 PHP Version:      5.3.0RC2
 New Comment:

Just a question:

> mysqlnd (5.3.0) doesn't read the my.ini/my.cnf at all,
> thus also not the [mysql] section.
>
> You can overcome mysql's behavior by doing something like
> $conn->options(MYSQLI_SET_CHARSET_NAME, "yourcharset");

The Options "MYSQLI_READ_DEFAULT_FILE" and "MYSQLI_READ_DEFAULT_GROUP"
are still available with mysqlnd?

If yes, you should also change the description at [1].
--> "instead of my.cnf" += " or none as of 5.3.10 with mysqlnd"

If no:
--> "only available with libmysql"

(IMHO there is an other place in the docu, which also describe these
options.)
 
Regards,
Carsten

[1] http://de.php.net/manual/en/mysqli.options.php


Previous Comments:
------------------------------------------------------------------------

[2009-05-18 14:57:04] and...@php.net

mysqlnd (5.3.0) doesn't read the my.ini/my.cnf at all, thus also not
the [mysql] section. Yes, mysqlnd set the charset of the connection to
be the charset of the server sent during the handshake. In the greeting
packet the server says which its default charset is. The server
interprets the username in the the charset sent by the client.
Libmysql doesn't look at what the server advertises but uses its own
charset, sometimes pulled from the config, sometimes what is set through
mysql_options - depends how used.
You can overcome mysql's behavior by doing something like
$conn = new mysqli(); // no params, no connection
$conn->options(MYSQLI_SET_CHARSET_NAME, "yourcharset");
$conn->connect("host", "user", "pass"...);

HTH,
Andrey

------------------------------------------------------------------------

[2009-05-16 15:14:52] aaa_whoknows_me at list dot ru

It applies only to PHP 5.3.0 and higher. Now I'm using PHP 5.2.9-2 for
Windows and it is able to connect to the same MySQL server.

------------------------------------------------------------------------

[2009-05-15 17:26:34] j...@php.net

Just to make sure: This does not happen with PHP 5.2.9 ??

------------------------------------------------------------------------

[2009-05-15 12:16:27] aaa_whoknows_me at list dot ru

Description:
------------
PHP >= 5.3.0 sends user name to mysql server in an incorrect encoding
in some cases.
-----------------------
In this case PHP uses UTF-8 as its default encoding. PHP sends user
name in mysql server default encoding. But in some cases mysql uses
different encodings for data storing and sql queries. Consider a
following situation:
my.ini
[mysql]
default-character-set=utf8
 [mysqld]
default-character-set=ucs2
So, 'user' in UTF-8 == 'ôÈ' in UTF-16BE

Reproduce code:
---------------
$link = mysql_connect('user', 'password', 'database');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
---------------
try {
    $dbh = new PDO('mysql:host=localhost;dbname=database', 'user',
'password');
    foreach($dbh->query('SELECT id FROM users;') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
}
---------------
$mysqli = new mysqli('localhost', 'user', 'password', 'database');

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* Select queries return a resultset */
if ($result = $mysqli->query("SELECT id FROM users;")) {
    printf("Select returned %d rows.\n", $result->num_rows);

    /* free result set */
    $result->close();
}

$mysqli->close();

Expected result:
----------------
A successful connection to the mysql database.

Actual result:
--------------
Access denied for user 'ôÈ'@'localhost' (using password: YES)


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=48293&edit=1

Reply via email to