php5からphp7への修正するにあたり、以下郵便番号を取得するphp5のソースを示します
php
1/* php5 */ 2$mysql_link = mysql_connect($db_con_host, $db_con_user, $db_con_pass, $db_con_dbname); 3$sql = "SELECT zip, address1, address2, address3 FROM zip_data WHERE zip = '100-0013';"; 4$sql = func_mysql_real_escape($sql); 5 6function func_mysql_real_escape($str) 7{ 8 $str = mysql_real_escape_string($str); 9 return $str; 10}
php7ではmysqlからmysqliになり、引数にmysqlリンクが追加で必要とのことで以下のように変更しました。
php
1/* php7 */ 2$mysql_link = mysqli_connect($db_con_host, $db_con_user, $db_con_pass, $db_con_dbname); 3$sql = "SELECT zip, address1, address2, address3 FROM zip_data WHERE zip = '100-0013';"; 4$sql = func_mysql_real_escape($sql); 5 6function func_mysql_real_escape($str) 7{ 8 $str = mysqli_real_escape_string($mysql_link, $str); 9 return $str; 10}
ユーザ定義関数での変更点は以下の通りです
php
1- $str = mysql_real_escape_string($str); 2+ $str = mysqli_real_escape_string($mysql_link, $str);
エラーでは下記のように表示されます
error
1Notice: Undefined variable: mysql_link 2Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given
mysql_linkが定義されていない、パラメータの1つにmysqliが必要だがnullがあるとのことです。
関数の外で$mysql_linkにはmysql接続が確立しており、ユーザ定義関数でそれを使おうとするとエラーが出ていますが、なぜこの使い方ではエラーが発生するのでしょうか?
改善策
その後、下記の通り変更するとエラーが無くなりましたが、これが最善かどうかが不安ですがこれが最善と考えて良いのでしょうか?
php
1$sql = func_mysql_real_escape($mysql_link, $sql); 2 3function func_mysql_real_escape($link, $str) 4{ 5 $str = mysqli_real_escape_string($link, $str); 6 return $str; 7}
以上となります。
手続き型からpdoに変更することを勧められると思いますが、それについては新規で作成するときにチャンレンジしたいと思っております。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/27 16:44 編集
2022/01/27 19:43
2022/01/28 16:34