【问题标题】:Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in不推荐使用:mysql_query():不推荐使用 mysql 扩展并将在将来删除:使用 mysqli 或 PDO 代替
【发布时间】:2016-09-28 03:02:08
【问题描述】:

我的 wordpress+plugin 网站有问题,wp debug 告诉我这个:

已弃用:mysql_query():mysql 扩展已弃用,将来将被删除:改用 mysqli 或 PDO 在 /home/effdbsmi/public_html/new/erotika/wp-content/plugins/sofa-front-post/sofa-front-post.php 上 第 236 行

警告:mysql_query():拒绝访问用户'root'@'localhost' (使用密码:否) 在 /home/effdbsmi/public_html/new/erotika/wp-content/plugins/sofa-front-post/sofa-front-post.php 上 第 236 行

警告:mysql_query():无法建立到服务器的链接 在 /home/effdbsmi/public_html/new/erotika/wp-content/plugins/sofa-front-post/sofa-front-post.php 上 第 236 行

警告:mysql_num_rows() 期望参数 1 是资源,布尔值 给定 在 /home/effdbsmi/public_html/new/erotika/wp-content/plugins/sofa-front-post/sofa-front-post.php 上 第 236 行

在 sofa-front-post.php 的 236 行有该代码(在 第 4 行):

	function sfp_create_database_table() {
			global $wpdb;
			$table = $wpdb->prefix . 'sfp_payments';
			if( mysql_num_rows( mysql_query( "SHOW TABLES LIKE '" . $table . "'" ) ) == 1) return;
			$run_sql = "CREATE TABLE " . $table . " (
					  id INT NOT NULL AUTO_INCREMENT,
					  post_id VARCHAR(10) NOT NULL DEFAULT '',
					  user_id VARCHAR(10) NOT NULL DEFAULT '',
					  pub_type VARCHAR(20) NOT NULL DEFAULT 'free',
					  paypal_bulk LONGTEXT NOT NULL DEFAULT '',
					  UNIQUE KEY id (id)
					  );";
		
			require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
			dbDelta( $run_sql );
		}

我能做什么??谢谢各位。。

【问题讨论】:

  • 更新您的 php、mysql 版本并更新您的插件
  • 使用mysqli(查看参考,它的工作方式与mysql略有不同)
  • 我认为这里的基本问题是,WordPress 为插件提供了自己的方式来连接数据库,而您正试图绕过它。我不太了解 WordPress,无法解释如何修复它。从阅读codex.wordpress.org/… 开始——我认为你不应该直接接近mysql_ 函数(也不应该直接接近mysqli_PDO,因为WordPress 抽象了它们)。

标签: javascript php mysql wordpress


【解决方案1】:

警告信息很清楚地告诉我们“mysql 扩展已被弃用,将来将被删除:使用 mysqli 或 PDO 代替...”

所以我们需要使用 mysqli_query() 而不是 mysql_query(),在 Wordpress 中,在您的情况下,代码应更改如下:

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

if( mysqli_num_rows( mysqli_query( $connection, "SHOW TABLES LIKE '" . $table . "'" ) ) == 1) return;
....

【讨论】:

    【解决方案2】:

    您可以像这样测试表是否存在:

    if( $wpdb->get_var("SHOW TABLES LIKE '".$table."'") == $table) return;
    

    【讨论】:

      【解决方案3】:

      您可以忽略除此之外的所有这些消息:

      “用户'root'@'localhost'的访问被拒绝(使用密码:否)”

      这表示您没有为 MySQL 提供密码。提供密码,您就可以开始了。

      “不推荐使用 mysql 扩展并将被删除”- 忽略它,除非您想重新设计您的代码(这是一个好主意但不是必需的)。

      “无法建立到服务器的链接” - 这只是上述密码错误的结果

      “mysql_num_rows() 期望参数 1 是资源” - 这也是密码错误的结果。

      【讨论】:

      • 他可以,但不应该
      • “提供密码”——这并不像你建议的那么简单,因为密码来自配置文件。
      • 坏建议:这些功能将被弃用是有原因的。我不认为 OP 会喜欢在sfp_payments(以及其他)的一般区域中进行一些讨厌的 sql 注入。
      猜你喜欢
      • 2014-12-29
      • 2014-01-05
      • 2012-12-06
      • 2017-08-20
      • 2014-09-18
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      相关资源
      最近更新 更多