PHP5で作成されたサイトをPHP7に対応させています。
mysql関数をmysqli関数に置き換えていたところ、sql文がきちんと発行されていないことが判明しました。
調べてみると、文字エスケープ処理の箇所に不具合があるようでした。
具体的には、mysqli_real_escape_stringを使用すると2byte文字が消えてしまうようです。
utf-8がASCIIに変換されていることによって文字が消えているのではと推測しています。
ちなみにこの一文をコメントアウトすると正常にデータベースの追加・更新できます。
ただそれだとよろしくないので、原因と対処方法をご教授いただけないかと思います。
ヒントとなるサイトなどでも構いませんので何卒よろしくお願いいたします。
状況:
データベースには正常に接続
下記のsql文はサンプル
pdoは使えない
データベースの文字コードはutf-8
$connect = mysqli_connect($server, $user, $password); $result = "UPDATE `table` SET `id` = 100, `name` = `サンプルネーム`, `text` = `サンプルテキスト` WHERE global_id = 3"; echo "エスケープ前の文字コード :".mb_detect_encoding($result); $result = mysqli_real_escape_string($connect,$result); echo "エスケープ後の文字コード:".mb_detect_encoding($result); //mysqli_real_escape_stringを通した後の$result //UPDATE `table` SET `id` = 100, `name` = ``, `text` = `` WHERE global_id = 3
エスケープ前の文字コード:utf-8
エスケープ後の文字コード:ASCII が出力されている。