In my code Im trying to translate mysql_real_escape_string into a PDO statement. Does somebody have a tip on how to write mysql_real_escape_string in PDO?
Im using mysql_real_escape_string in two lines: $userName = mysql_real_escape_string($_POST['username']); $password = sha1(mysql_real_escape_string($_POST['password']));
<?php
ob_start();
session_start();
include("../database/db.php");
$userName = mysql_real_escape_string($_POST['username']);
$password = sha1(mysql_real_escape_string($_POST['password']));
echo "<br>user: " . $userName;
echo "<br> pw: " . $password;
$query = "select * from tbladmin where admin_usr_name='$userName' and admin_pwd='$password'";
$res = mysql_query($query);
// $rows = $res->fetch(PDO::FETCH_ASSOC);
$rows = mysql_fetch_assoc($res);
echo "<br>numrows" . mysql_num_rows($res) . "<br>";
// $find = $query->prepare("select * from tbladmin where admin_usr_name='$userName' and admin_pwd='$password'");
// $find->execute();
// if ($find->fetchColumn() > 0)
// {
// echo 'You made it, welcome';
// $_SESSION['userName'] = $rows['admin_usr_name'];
// $_SESSION['admin_id'] = $rows['admin_id'];
// header("location: ../pages/content.php");
// }
// else
// {
// echo 'Username and password dont match <br/> Try again';
// header("location: ../index.php?loginerror=yes");
// }
if(mysql_num_rows($res)>0)
{
$_SESSION['userName'] = $rows['admin_usr_name'];
$_SESSION['admin_id'] = $rows['admin_id'];
header("location: ../pages/content.php");
}
else
{
echo 'Username and password dont match <br/> Try again';
header("location: ../index.php?loginerror=yes");
}
?>
This is what Im trying to do with PDO
$host = "localhost";
$user = "root";
$password = "root";
$db = "blog";
$dsn = "mysql:host=$host;dbname=$db;charset=utf8";
$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
$pdo = new PDO($dsn,$user,$password, $opt);
$username = $_POST['username'];
$password = $_POST['password'];
$query = "select * from tbladmin where admin_usr_name=:userName and admin_pwd=:passWord";
try
{
$databas = new PDO($dsn, $user, $password);
}
catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
}
$statement = $databas->prepare($query);
$statement->execute(array(':userName'=>$username, ':passWord'=> $password));
$row = $statement->fetch();
I always get this error: Call to a member function prepare() on a non-object
The point is by using prepared statements with parameterised queries and bound values you don't need things such as mysql_real_escape_string
.
Check out the PDO documentation on how to use bound values and parameterised queries/prepared statements.
The point is that you would write an SQL query as such:
$query = $pdo->prepare("SELECT * FROM users WHERE username = ? and password = ?");
You would then pass in the bound values in place of the ? symbols, thus the query is only ever run literally as so:
$query->bindParam(1, $username);
$query->bindParam(2, $password);
Any sort of SQL injection attempt such as 1'; DROP users --
inside the variables above would no longer work as it would be called literally.
You don't need to in PDO. At least, rarely do you need to.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With