【发布时间】:2012-06-03 17:00:05
【问题描述】:
我用 PHP 开发了一个名为 vishwasthali.org 的网站,并将其托管在第三方服务器上的 IIS7 中。除了我使用 MySQLi API 编写的数据库访问代码之外,其他一切工作正常。该代码在本地主机上运行良好,但在服务器上却不行。在服务器和我的机器上使用phpinfo(),我发现:
(1)在我的机器上(运行在Windows 7 32位,Apache主机环境),PHP版本是5.3.8,mysqli版本是5.0.8-dev ,和
(2)在服务器上(运行Windows Server 2008,IIS7宿主环境),PHP版本为5.2.14,mysqli版本为5.0.51a。
下面是phpinfo()在服务器上的截图:
这是 mysqli 代码示例。
session_start();
include_once 'code_files/conn.php';
$stmt = $mysqli->prepare('SELECT * FROM adminusers WHERE Username = ? AND `Password` = ?');
$stmt->bind_param('ss', $_POST['Username'], $_POST['Password']);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows > 0)
........
else
........
使用echo get_class($mysqli); 会显示mysqli。这意味着,代码确实检测到了 mysqli。但是声明$stmt 没有准备好。即使$mysqli->error; 也没有显示任何错误,可能是因为PHP 正在IIS 上运行。
现在我有两个选择,要么将数据库访问代码更改为经典 mysql API,要么通过从 php 下载最新的 PHP 二进制文件来升级服务器上的 PHP 和 MySQLi 版本.net。我不喜欢第一个选项(这绝对有效),希望你知道为什么。后者不在我手中。想不出比这些更多的了。
我想替换上的 php_mysqli.dll 可能会升级 mysqli 版本,不确定。但是PHP版本呢?
在这种情况下我该怎么办。服务器上的 PHP 和 MySQLi 版本升级会解决我的问题吗?如果是,是否会影响服务器上运行的其他 PHP 网站?
提前致谢。
【问题讨论】:
-
你能详细说明服务器上发生了什么吗?代码如何不起作用?您是否收到错误消息?另外,在将输入传递给 bind_param 之前,您应该确保清理输入以防止 SQL 注入。直接从 $_POST 传递数据是一个非常冒险的提议。
-
+1 以提高问题的清晰度和措辞力度
-
@nageeb:感谢您的建议。当我在本地主机上使用语句
echo ($stmt) ? "Statement Prepared" : "No Statement";时,它会打印“Statement Prepared”,而在服务器上,它会打印“No Statement”。简单地说,执行停止在我准备语句的那一行,并显示一个空白页(因为上面的代码在一个单独的文件中)。