$ mysql消失了?

时间:2013-03-21 09:49:33

标签: php mysql

嗨我正在编写一个安装程序,无论如何......当它创建了global.php文件时遇到了麻烦,$ mysql_连接没有显示在文件中,而其他一切都没有?

我正在尝试插入此

$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_name = '-----';
$mysql_pass = '-----';
在global.php中

它出现了:

 = 'localhost';
 = 'root';
 = '-----';
 = '-----';

注意$ mysql_缺失?

这是安装程序中的代码:

    $db_name = trim($_POST['db_name']);
    $db_user = trim($_POST['db_user']);
    $db_pass = trim($_POST['db_pass']);
    $db_host = trim($_POST['db_host']);     

    $handle = fopen($setting['config']['folder'] . $setting['config']['file'], 'w');

$input = "<?php



$mysql_host = '".$db_host."';
$mysql_user = '".$db_user."';
$mysql_name = '".$db_name."';
$mysql_pass = '".$db_pass."';
?>

";

fwrite($handle, $input);
fclose($handle);

有人可以帮忙吗? 感谢

2 个答案:

答案 0 :(得分:2)

$input = "<?php
\$mysql_host = '$db_host';
\$mysql_user = '$db_user';
\$mysql_name = '$db_name';
\$mysql_pass = '$db_pass';
?>";

在双引号字符串中,$ sign就像连接一样。如果你想在字符串中插入美元符号,你应该用\反斜杠转义它。

答案 1 :(得分:0)

由于您在字符串中使用双引号,PHP将解释它在字符串中看到的变量名称,并输出变量的值而不是变量名。

这是一个php功能,旨在允许您将变量嵌入到字符串中,而无需重复打开和关闭字符串。具有讽刺意味的是,这正是您对实际PHP变量的所作所为。

您有两种选择:

  1. 切换到使用单引号作为字符串。这将完全按照你的方式工作。

  2. 继续使用双引号,但使用反斜杠转义$符号,不要让PHP解释它。

    如果你继续使用双引号,你也可以使用我所说的将变量嵌入字符串中的选项,因此你不需要保持打开和关闭引号。在这种情况下,您的代码将如下所示:

    $input = "<?php
    
    \$mysql_host = '{$db_host}';
    \$mysql_user = '{$db_user}';
    \$mysql_name = '{$db_name}';
    \$mysql_pass = '{$db_pass}';
    ?>
    ";
    
  3. 您需要注意的另一件事是:当您从$db_xx读取$_POST变量时,您并未转义它们。这意味着,例如,如果用户的名称或密码中包含引号字符,则会导致生成无效的PHP代码。

    此外,用户可以将此错误用作将任意PHP代码注入系统的技术。虽然此脚本显然只在首先设置系统时使用,但这是代码中的一个主要安全漏洞,应予以纠正。