【问题标题】:mysql_connect errormysql_connect 错误
【发布时间】:2012-10-17 12:34:09
【问题描述】:

在下面的代码中,我看到echo1 语句,之后我在 UI 上看不到任何打印内容。用户名和密码正确。但是 PHP 似乎没有连接到 MySQL。甚至没有看到模具声明我做错了什么。遇到mysql_connect 后,其余代码不起作用:

<?php    
echo "echo1==========";
$con = mysql_connect("localhost","root", "xxxx123") or die("Error connecting to database");
echo "+++++++++ echo2";
echo $con;
mysql_close($con);
  ?>          

【问题讨论】:

  • 尝试使用' 而不是",例如mysql_connect('localhost', 'mysql_user', 'mysql_password'); 试试看告诉我!我会详细说明!
  • 你的error reporting打开了吗?
  • 也试试 ..or die(mysql_error());获取更多信息..
  • @Ilia Rostovtsev:没关系。问题是错误报告已关闭。 Rajeev,打开错误报告然后你会看到什么问题,但请不要使用 mysql_ stuffess,尝试 PDO 或 mysqli_
  • Please, don't use mysql_* functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?改为了解prepared statements,并使用PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.

标签: php


【解决方案1】:

您应该错过了一个错误。添加:

ini_set('display_errors', 1);
error_reporting(E_ALL);

在脚本的开头

【讨论】:

  • 是的,问题是“我只看到 echo1,为什么我看不到其余的?”
【解决方案2】:

没有输出意味着致命错误。唯一可能的致命错误是“未定义函数mysql_connect(除非某处真的搞砸了)。这意味着mysql 库未安装,或者它可能只是未在php.ini 文件中启用。

检查所述文件,并在您打开error_reporting 时打开。

【讨论】:

  • 我想是这样,但我不确定在 php.ini 中必须进行哪些更改
  • 嗯,这取决于您运行的是 Windows 还是 Linux。如果是 Windows,则需要将适当的 DLL 添加到扩展列表中。如果是Linux...我不知道。您的网络托管服务商可能会为您提供帮助。
【解决方案3】:

如果您像这样使用您的代码,那么它很容易受到 SQL 注入攻击。我强烈建议您在将数据插入数据库时​​使用mysql_real_escape_string 以防止SQL injections 作为快速解决方案或更好地使用PDOMySQLi

如果您打算使用mysql_*,那么我建议您阅读有关mysql_* 函数的PHP 手册章节, 他们指出,不建议将此扩展用于编写新代码。相反,他们说,您应该使用 MySQLiPDO_MySQL 扩展名。

我还检查了 mysql_connect 并发现了一个奇怪的规律,即 - 如果您在 mysql_connect 参数上使用 ",那么它无法连接,而在我的情况下,当我测试它时,它发生的只是描述的方式,所以,请试试这个:

$con = mysql_connect('localhost','username','password');

" 替换为',如PHP Manual 示例中所示,它可能会起作用!

已编辑

对于那些不赞成投票的人 - 先尝试!我在我的服务器上使用" 对其进行了测试,它给了我一个错误:Warning: mysql_connect(): Access denied for user。我使用 PHP 5.4.6 版本!

使用 SSH 登录到您的服务器并运行 php --modules - 如果您在列表中没有看到 mysql - 那么这就是您的致命错误的原因。

【讨论】:

  • 请问在完全不涉及用户输入的情况下,OP 的代码如何甚至远程容易受到注入的攻击?当看不到变量插值时,单引号与双引号有什么区别?你知道你在说什么吗?
  • @Kolink mysql_connect 表示将使用其余部分!因此。没有理由在已弃用且易受攻击的 mysql_ 扩展上构建项目。
  • @Kolink:我个人认为默认情况下所有mysql_* 函数都容易受到SQL 注入攻击。是否涉及实际查询。对我来说,这是让用户快速远离它的另一个“借口”。
  • @Madara Uchiha 完全同意。编程是关于美丽(对我而言),而不仅仅是获得预期的结果!看不到服务器部分,但必须从第一步开始就做好并组织好!
  • @IliaRostovtsev:将来其他开发人员会看到维护您的代码,甚至未来的您。正如比我更聪明的人曾经说过的那样,善待未来的你
【解决方案4】:

问题是 ph5-mysql 驱动程序没有安装。安装它并让它工作..现在 mysql_connect() 函数工作..感谢所有帮助

【讨论】:

    【解决方案5】:

    对于 Tomcat 7,php.ini 的默认目录实际上是 C:\windows。因此修改(启用模块、扩展等)php.ini 应复制到 C:\windows。然后运行 ​​phpinfo();。即使在 PHP 5.x 旁边的 Tomcat 7 上,它也应该可以正常工作。当我想让 mysql 语句正常工作时,我遇到了这个问题并且很挣扎。

    即使遵循 [779246] (Run a php app using tomcat?) 中答案的所有说明,mysql 语句也不起作用(Windows 7 上的 Tomcat 7、PHP 5.2.16、PECL 5.2.5、MySql 5.6)。所以我开始研究“phpinfo();”如前一段所述,仔细输出并使用解决方案。如果您想使用 PDO(这是 PHP 中普通 mysql_* 方法的未来),请务必在 php.ini 中启用 mysql dll 扩展和 PDO 扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多