【问题标题】:creating a session using PDO使用 PDO 创建会话
【发布时间】:2014-12-22 19:11:29
【问题描述】:

我有一些代码在会话页面中用于登录表单,但它使用mysql_* 函数:

<?php
$connection = mysql_connect("localhost", "root", "password");
$db = mysql_select_db("database", $connection);

session_start();// Starting Session
$user_check=$_SESSION['login_user'];

$ses_sql=mysql_query("select * from login where email='$user_check'", $connection);
$row = mysql_fetch_assoc($ses_sql);
$login_session =$row['email'];
$user_id =$row['id'];
$user_passwords = $row['password'];


if(!isset($login_session)){
mysql_close($connection); // Closing Connection
header('Location: login_form.html'); // Redirecting To Home Page
}
?>

我正在尝试将其更改为 PDO。到目前为止,我已经进行了这些修改,但我不确定它们是否正确:

<?php
// Establishing Connection with Server by passing server_name, user_id and password as a parameter
$dbhost     = "localhost";
$dbname     = "databse";
$dbuser     = "root";
$dbpass     = "password";

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);

session_start();
$user_check=$_SESSION['login_user'];

$result = $conn->prepare("SELECT * FROM login WHERE email= :$user_check");
$row = $result->fetch(PDO::FETCH_ASSOC)

$login_session =$row['email'];
$user_id =$row['id'];
$user_passwords = $row['password'];

if(!isset($login_session)){
$conn = null; // Closing Connection
header('Location: login_form.html'); // Redirecting To Home Page
}
?>

谁能告诉我这是否正确?

【问题讨论】:

  • 有什么理由不能只测试脚本吗?

标签: php mysql sql pdo phpmyadmin


【解决方案1】:

我建议您更改代码,如下所示。你应该执行$result

$result = $conn->prepare("SELECT * FROM login WHERE email = :user_check");
$result->bindValue(':user_check', $user_check);
$result->execute();
$row = $result->fetch(PDO::FETCH_ASSOC);

【讨论】:

    【解决方案2】:

    在获取之前不要忘记execute(),并且占位符不带美元符号:

    $result = $conn->prepare("SELECT * FROM login WHERE email= :user_check");
    $result->execute(array(':user_check'=>$user_check));
    $row = $result->fetch(PDO::FETCH_ASSOC);
    

    【讨论】:

      【解决方案3】:

      看起来不错,除了:

      $result = $conn->prepare("SELECT * FROM login WHERE email= :$user_check");
      $row = $result->fetch(PDO::FETCH_ASSOC);
      

      当您执行 prepare() 时,您必须将 execute() 中的参数传递给它(或使用 bindValue(),正如其他人所展示的那样,但这种方式更清洁,IMO)

      $result = $conn->prepare("SELECT * FROM login WHERE email= :usercheck");
      $result->execute(array(":usercheck"=>$user_check));
      $row = $result->fetch(PDO::FETCH_ASSOC);
      

      别忘了那个分号 ;)

      【讨论】:

        猜你喜欢
        • 2014-12-22
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 2021-12-25
        • 2014-08-27
        • 1970-01-01
        相关资源
        最近更新 更多