MySQL仅适用于localhost

时间:2015-02-03 10:12:16

标签: php html5 apache mysqli mamp

出于某种原因,这段代码在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上工作正常。

提前感谢您的帮助。

1 个答案:

答案 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();