【发布时间】:2017-08-27 10:56:17
【问题描述】:
我有 (2) 个 PHP 脚本:一个用 PHP 4.0 编写,第二个用 PHP 5.6 编写(我的 ISP 升级了服务器,他们现在只运行 PHP 5.6,所以我不得不将 4.0 脚本转换为 5.6)
但是,当我使用 PHP 4.0 脚本时,在 ISP 升级之前一切正常,但是当我使用 PHP 5.6 脚本(已转换)时,此脚本无法连接到 mySQL 服务器或返回任何值
我想知道初始变量是否有问题,或者从早期的 PHP 4.0 脚本转换而来的第二个 PHP 5.6 脚本中是否缺少某些东西
谢谢
这里是 (2) PHP 脚本
PHP 4.0 脚本
<?php
$userdb="var1";
$pass="var2";
$database="var3";
mysql_connect("sql.servername.com",$userdb,$pass);
@mysql_select_db($database) or die ( header('location: status4.htm') );
$match = "select id from USER_ACCOUNTS where username = '$username' and password = '$password'";
$qry = mysql_query($match)
or die ( header('location: status.htm?status=9') );
$num_rows = mysql_num_rows($qry);
// Valid Username and Password
if ($num_rows > 0) {
$qry = "SELECT * FROM USER_ACCOUNTS WHERE username like '%" . $username . "%'";
$res = mysql_query($qry);
$output='';
while($row = mysql_fetch_assoc($res)){
// loop through all returned results
$output .= '&viewUsername=' . $row['viewUsername'] . '&viewPassword=' . $row['viewPassword'] . '&username=' . $row['username'] .
'&password=' . $row['password'] . '&name=' . $row['name'] . '&title=' . $row['title'] . '&email=' . $row['email'] . '&admin=' .
$row['admin'] . '&file=' . $row['file'] . '&file2=' . $row['file2'] . '&file3=' . $row['file3'] . '&file4=' . $row['file4'];
echo "&status=1";
echo $output;
}
}
?>
这里是 PHP 5.6 脚本
<?php
//error_reporting(1);
//ini_set('display_errors', '1');
// mysql connection
$db_host = 'sql.servername.com';
$db_user = 'var1';
$db_pass = 'var2';
$db_name = 'var3';
$dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name.';charset=utf8', $db_user, $db_pass);
// submit form
if (isset($_POST['submit']))
{
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $dbh->prepare("SELECT * FROM USER_ACCOUNTS WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
$number_of_rows = $stmt->fetchColumn();
// Valid Username and Password
if ($number_of_rows > 0)
{
$row = $stmt->fetchAll();
$output = '';
while($row)
{
// loop through all returned results
$output .= '&viewUsername=' . $row['viewUsername'] . '&viewPassword=' . $row['viewPassword'] . '&username=' . $row
['username'] . '&password=' . $row['password'] . '&name=' . $row['name'] . '&title=' . $row['title'] . '&email=' . $row['email'] .
'&admin=' . $row['admin'] . '&file=' . $row['file'] . '&file2=' . $row['file2'] . '&file3=' . $row['file3'] . '&file4=' . $row
['file4'];
echo "&status=1";
echo $output;
}
}
}
?>
【问题讨论】:
-
php4 已经过时了,在这里并不重要。您应该尝试从正在运行的 5.6 脚本中提供更多调试。比较这两个脚本对 5.6 的工作没有太大帮助。
-
你遇到了什么错误?
-
两者之间的一些区别是;在第二个中,您有 POST 数组。使用 php 的错误报告来查看它的结果和 PDO 上的异常。
-
@ServerProgrammer 如果它没有连接,那么使用 PDO 的错误处理 php.net/manual/en/pdo.error-handling.php 并使用 setAttribute 选项。您还应该在测试期间取消注释错误报告。
-
@ServerProgrammer 看看我的答案之一stackoverflow.com/a/22253579/1415724 它包含完整的 PDO 方法和连接错误处理以检查是否存在行。如果这对您有用,那么从那里获取并修改它以适合您的数据库/列。让我知道事情进展如何。