出于某种原因,这段代码在localhost(MAMP)上完美运行,但由于某些原因它在我的域上无效。
<?php
require(ROOT."/resc/define.mysql.php");
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$query = 'SELECT * FROM `Products` WHERE ID = '.mysql_real_escape_string($_GET['art']);
$resultSet = $mysqli->query($query);
if ($resultSet->num_rows != 0) {
while ($row = $resultSet->fetch_assoc()) {
foreach ($row as $key => $value) {
$$key = $value;
}
}
} else {
echo('MySQL Error!');
}
?>
<article class="full">
<header><h1><?php echo($Title); ?></h1></header>
<img style="float:right;width:60%;" src="<?php echo($ImagePath); ?>">
<footer>
<?php echo($Ingres); ?>
</footer>
<br/>
<h4>Specs:</h4>
<ul style="padding-left:30px;">
<?php echo($Specs); ?>
</ul>
<br/>
<p style="font-size:90%;line-height:1.5;">
<?php echo($Article); ?>
</p>
<div class="clearBoth"></div>
</article>
开头的require()
获取一个文件,该文件需要包含mysql登录信息的脚本。这在localhost上是一个不同于web服务器上的文件。 Web服务器上的此文件位于httpd.private中,其访问方式如下:require($_SERVER['DOCUMENT_ROOT']."/../httpd.private/define.mysql.php");
,并包含:
<?php
define('DB_USER', 'myUsername');
define('DB_PASS', 'myPassword');
define('DB_HOST', 'myHostAddress');
define('DB_NAME', 'myDatabaseName');
define('DB_CHAR', 'utf8');
define('DB_COLL', '');
?>
然后脚本继续为所选行中的每个单元格创建变量,然后在HTML代码中的适当位置回显这些变量。我的localhost和webserver上的数据库是彼此的精确副本,因此不会出现问题。我试图解决所有我能想到的问题,登录信息是正确的,因此对数据库的连接工作正常,但由于某种原因,从Web服务器运行时,脚本不会从数据库输出信息。但它在localhost上工作正常。
提前感谢您的帮助。
答案 0 :(得分:0)
我认为错误是使用mysql_real_escape_string
,实际上PHP文档报告第二个参数$link_identifier
需要mysql_connect()
的有效链接:
$ link_identifier:MySQL连接。如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样。如果未找到或建立连接,则会生成 E_WARNING 级别错误。
我认为您自己的服务器设置为不显示警告。
尝试在开始连接之前输入error_reporting(E_ALL)
,看看你是否真的收到警告。
如果您确实收到了错误,我认为最好使用语句以这种方式阻止SQL注入:
$query = "SELECT * FROM `Products` WHERE ID = ?";
$stmt = $mysqli->prepare($query);
if ($stmt === FALSE) {
die("$mysqli->error");
}
$art = $_GET['art'];
$stmt->bind_param('i', $art);
$stmt->execute();
if ($stmt->errno != 0) {
die("SQL Error: ({$stmt->errno}), {$stmt->error}");
}
$resultSet = $stmt->get_result();
$stmt->close();