【问题标题】:mysql_connect in php 5.6 + [duplicate]mysql_connect 在 php 5.6 + [重复]
【发布时间】:2017-04-11 01:29:37
【问题描述】:

我在 Godaddy Hosting 中使用的是 PHP 5.4。我有一个运行良好的 PHP 脚本。现在我已经更改了托管和新托管公司提供 PHP 5.6。我不会 PHP 编码。我的脚本出现如下错误

不推荐使用:mysql_connect():不推荐使用 mysql 扩展并将在将来删除:在第 7 行的 /home4/z4g9f1v6/public_html/mydomain.com/folder/config.php 中使用 mysqli 或 PDO 代替

我的配置文件如下所示

$mysql_hostname = "localhost";
$mysql_user = "dbuser";
$mysql_password = "dbpass";
$mysql_database = "dbname";
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
mysql_select_db($mysql_database, $bd) or die("Could not select database");

我在我的 Search.php 中使用它,如下所示

include("config.php");
if($_SERVER["REQUEST_METHOD"] == "POST")
{
mysql_query('SET character_set_results=utf8');
mysql_query('SET names=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_results=utf8');
mysql_query('SET collation_connection=utf8_general_ci');
$q=$_POST['q'];
$q=mysql_escape_string($q);
$q_fix=str_replace(" ","%",$q); // Space replacing with %
$sql=mysql_query("SELECT qu_text FROM quotes WHERE qu_text LIKE '%$q%'");
}while($row=mysql_fetch_array($sql)){$title=$row['qu_text'];

请帮助我。我该如何解决这个问题?

谢谢

【问题讨论】:

  • 警告的结尾告诉你如何修复它。 use mysqli or PDO。您也可以使用此方法进行 SQL 注入。更新后使用参数化查询。

标签: php mysql mysqli


【解决方案1】:

随着 PHP 正在成为一种面向对象的脚本语言,最好使用 PDO 来连接数据库并执行操作,为此您需要付出更多的努力。就像为每个表(每列作为变量)创建实体类一样,这是唯一繁忙的部分,但它会使程序更安全和更具可读性。

我只是给出连接数据库和检索数据集的代码:

1. DBConfig.php

$dsn = 'mysql:dbname=<database-name>;host=<host-name>';
$user = '<user-name>';
$password = '<password>';

try 
{
    $conn = new PDO($dsn, $user, $password);
}
catch (PDOException $e) 
{
    echo 'Connection failed: ' . $e->getMessage();
}

2。搜索.php

require_once 'DBConfig.php';   //If DBConnection is not made in same file
require_once '<name-of-entity-class>.php';

$q = (isset($_POST['q']) && !empty($_POST['q'])) ? $_POST['q'] : NULL; 

try
{
   $query = "SELECT qu_text FROM quotes WHERE qu_text LIKE :q";

   $stmt = $conn->prepare($query);

   $stmt->bindValue(':q', $q, PDO::PARAM_STR);

   $stmt->execute();

   while($row = $stmt->fetch())
   {
      $dataset[] = new <name-of-entity-class>($row);
   }

   if(!empty($dataset))
   {
      foreach ($dataset as $data)
      {   
        echo '<p>';
        echo $data->get<var-name>;
        echo '</p>';
      }
   }
   else
      echo 'empty database';
}
catch (Exception $ex) 
{
     echo 'Some error occured: ' . $e->getMessage();
}

感谢和问候。

【解决方案2】:

对于 Myqli 连接

$mysql_hostname = "localhost";
$mysql_user = "dbuser";
$mysql_password = "dbpass";
$mysql_database = "dbname";
$bd = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password,$mysql_database) or die("Could not connect database");

查询请关注这个答案How can I prevent SQL injection in PHP?真的很好。

你可以用它来查询

$sql=sprintf("SELECT qu_text FROM `quotes` WHERE qu_text LIKE '%s%%'"),mysqli_real_escape_string($bd,$q));

$fetch= mysqli_query($bd,$sql) or die(mysql_error());

while ($row = mysqli_fetch_array($fetch, MYSQLI_ASSOC)) {
//Your Result
}

大多数 mysql_ 语法都可以与 mysqli_ 一起使用

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2016-11-01
    • 2014-03-14
    • 1970-01-01
    • 2019-12-01
    • 2019-02-08
    相关资源
    最近更新 更多