gpt4 book ai didi

php - 如何使用已弃用的 mysql_* 函数成功重写旧的 mysql-php 代码?第二部分

转载 作者:行者123 更新时间:2023-11-30 23:30:36 26 4
gpt4 key购买 nike

继续本主题,我们解释了 PDO 的大多数问题 How to successfully rewrite old mysql-php code with deprecated mysql_* functions?现在关于理解准备好的语句......所以为了删除 mysql_* 字符串有一些例子所以我对所有和其他用户的问题可能会发现有帮助哪个解决方案是最好的......所以旧的“组成*代码的例子:

in config.php: 
$db = new dbConn('127.0.0.1', 'root', 'pass', 'people', 'login');
in login.php
$db->selectDb("login");
$query = mysql_query("SELECT * FROM account WHERE id='".$_session["id"]."' LIMIT 1");
$result = mysql_fetch_array($query);

$_session["id"] 是在实际登录时定义的,所以现在我们有几种选择:

In config.php:
$db_people = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');
$db_login = new PDO('mysql:host=127.0.0.1;dbname=login;charset=UTF-8', 'root', 'pass');

And in login.php 1):
$stmt = $db_login->prepare("SELECT * FROM account WHERE id=? LIMIT 1");
$stmt->execute(array($_session["id"]));
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

或者排除查询时这个更好?还是上一个更好?

And in login.php 2):    
$query = "SELECT * FROM account WHERE id=? LIMIT 1";
$parameters = array($_session["id"]);
$statement = $db_login->prepare($query);
$statement->execute($parameters);
$results = $statement->fetch(PDO::FETCH_ASSOC);

还有这个登录表单:

  public function login($user, $password)
{
global $web, $db;
if (!empty($user) && !empty($password))
{
$user = $web->esc($user);
$password = $web->doHash($user, $password);

$db->selectDb('login');
$qw = mysql_query("SELECT * FROM account WHERE username='".$user."' AND pass_hash='".$password."'");

if (mysql_num_rows($qw) > 0)
{
$result = mysql_fetch_array($qw);
$_session['name'] = $result['username'];
$_session['id'] = $result['id'];
return true;
}
else
return false;
}
else
return false;
}

转成这种形式:

  public function login($user, $password)
{
global $web, $db_login;
if (!empty($user) && !empty($password))
{
$user = $web->esc($user);
$password = $web->doHash($user, $password);

$stmt = $db_login->prepare("SELECT * FROM account WHERE username=? AND pass_hash=?");
$stmt->execute(array($user, $password));
$rows = $stmt->rowCount();

if ($rows > 0)
{
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$_session['name'] = $result['username'];
$_session['id'] = $result['id'];
return true;
}
else
return false;
}
else
return false;
}

是否可以,还是再次进行单独的查询,或者以完全不同的方式进行查询?谢谢大家。

另外,当有多个 stmt 时,我应该为它使用不同的名称吗?例如,我使用 stmt 一次,然后在使用 result2 执行 stmt 之后创建一个 result1 我是否应该为 stmt 变量也选择不同的名称,或者只有结果名称可以不同?

最佳答案

好的,所以解决方案 login.php 1) 看起来很简单,不用着急。此外,登录页面似乎工作正常,因此它应该符合所有规则并且没问题 :)

关于php - 如何使用已弃用的 mysql_* 函数成功重写旧的 mysql-php 代码?第二部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com