MySQL 仅在本地主机上工作
MySQL only working on 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登录信息的脚本。这当然是本地主机上与网络服务器上不同的文件。 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 代码中的适当位置回显这些变量。我的本地主机和网络服务器上的数据库是彼此的精确副本,所以这不是问题。我已尝试解决所有我能想到的问题,登录信息是正确的,因此与数据库的连接工作正常,但由于某种原因,当 运行 来自网络服务器时,脚本不会从数据库输出信息。但是它在本地主机上运行良好。
在此先感谢您的帮助。
我认为错误是 mysql_real_escape_string
的使用,事实上 PHP 文档报告说第二个参数 $link_identifier
需要一个有效的 link mysql_connect()
:
$link_identifier: The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.
我认为您自己的服务器设置为不显示警告。
尝试在开始连接之前输入 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();
出于某种原因,此代码在本地主机 (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登录信息的脚本。这当然是本地主机上与网络服务器上不同的文件。 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 代码中的适当位置回显这些变量。我的本地主机和网络服务器上的数据库是彼此的精确副本,所以这不是问题。我已尝试解决所有我能想到的问题,登录信息是正确的,因此与数据库的连接工作正常,但由于某种原因,当 运行 来自网络服务器时,脚本不会从数据库输出信息。但是它在本地主机上运行良好。
在此先感谢您的帮助。
我认为错误是 mysql_real_escape_string
的使用,事实上 PHP 文档报告说第二个参数 $link_identifier
需要一个有效的 link mysql_connect()
:
$link_identifier: The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.
我认为您自己的服务器设置为不显示警告。
尝试在开始连接之前输入 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();