从mysql更改为mysqli代码错误

时间:2013-06-30 02:29:14

标签: php mysql mysqli

我正在将很多文件从mysql转换为mysqli。我正在使用它来执行此操作:https://wikis.oracle.com/display/mysql/Converting+to+MySQLi

我的连接文件(我已经拿出了我认为不必要的代码,例如简单的错误处理)会产生错误,我不知道如何修复。 原始代码:

$conn=mysql_connect ("$localhost", "$dbusername", "$dbpass");

mysql_select_db("$db", $conn);

新代码:

$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost",  "$dbusername",  "$dbpass")); 

((bool)mysqli_query( $conn, "USE $db"));

以上代码只是我连接到数据库文件,通过

在每个文件中使用
include_once("includes/connnect.php");

以前连接到数据库和表的代码必须使用下面的代码,因为我有很多像下面这样的查询,并且比许多文件更容易更改connect.php文件:

$con1 = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT * FROM table1 WHERE id='$id'"); 

编辑 - 更新为包含复制和粘贴时遗漏的半冒号。

编辑2 - 包含转化工具中的错误/警告消息

14  [Line 14] Please check your code for parse errors, we failed to parse " ". Conversion will be incomplete!".
14  [Line 14] Cannot analyze server parameter to extract host, socket and port! Conversion cannot be performed automatically. You must manually check the result of the conversion.
16  [Line 16] mysql_select_db(string database_name [...]) is emulated using mysqli_query() and USE database_name. This is a possible SQL injection security bug as no tests are performed what value database_name has. Check your script!

第14行是

$conn=mysql_connect ("$localhost", "$dbusername", "$dbpass"); 

和第16行是

mysql_select_db("$db", $conn);

编辑 - 工作回答如下。转换工具适用于我的所有其他文件。只需改变连接到连接文件中数据库的方式

$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost",  "$dbusername",  "$dbpass", "$db", "3306")) or die ('Cannot connect to the database because: ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));

3306是港口。要查找端口,请使用以下命令:

$port = ini_get("mysql.default_port");
echo "the port ". $port;

2 个答案:

答案 0 :(得分:3)

  

14 [第14行]请检查您的代码是否有解析错误,我们无法解析“”。转换将不完整!“。

此错误是由(来电中mysql_connect()之前的空格引起的。用$conn=mysql_connect("$localhost", "$dbusername", "$dbpass");替换它会删除MySQLConverterTool的此警告输出。

剩下的两个错误是你应该通过实际查看mysql_connect()mysqli_connect()之间的区别来处理的事情。 mysql_connect()的第一个参数$server可以格式化为hostname:port,而使用mysqli_connect(),您只能将hostname传递给第一个参数并传递{{1}作为可选的第五个参数。此外,mysqli会让您在port调用中指定数据库,而不是具有类似于mysqli_connect()的单独函数。

我建议,如果需要,可以使用转换器工具将所有源代码从mysql转换为mysqli 之外的这些行,并带有警告。只有您知道mysql_select_db()的格式是什么:如果它可能包含端口信息,则必须将端口信息分开。您应该将数据库设置为在"$localhost"中使用,而不是使用转换器的自动mysqli_connect()垫片。这正是转换器试图告诉你的: - )。

请注意,我不会说:

  

我的连接文件(我已经拿出了我认为不必要的代码,例如简单的错误处理)会产生错误,我不知道如何修复。

以上表明转换器生成的PHP代码本身会在运行时抛出PHP警告和错误(并不是说转换器抱怨您的原始代码或者告诉您需要实际进行一些手动转换,因为我上面讨论过)。这就是为什么我们一直在寻找错误,比如你纠正的曾经丢失的分号。

答案 1 :(得分:0)

你忘记了分号:

$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost",  "$dbusername",  "$dbpass")); //<---