2013-02-26 38 views
0

我现在用的波纹管查询,更新,但现在我想将其更改为PDO和它未能奏效 请任何帮助将不胜感激如何将更新查询从mysql更改为pdo?

function updateonlinesession(){    
    if(isset($_SESSION['username']['id'])){ 
    $uid = $_SESSION['username']['id']; 
    $page = $_SERVER['REQUEST_URI']; 
    $ip = $_SERVER['REMOTE_ADDR']; 
    $username = $_SESSION['logged']; 

    mysql_query("UPDATE site_user SET dateupdated = now(),ip = '$ip' WHERE 
    username = '".mysql_real_escape_string($_SESSION['username'])."'"); 
    } 

    } 

这是我试图与PDO

function updateonlinesession(){   
if(isset($_SESSION['username']['id'])){ 
$uid = $_SESSION['username']['id']; 
$page = $_SERVER['REQUEST_URI']; 
$ip = $_SERVER['REMOTE_ADDR']; 
$username = $_SESSION['logged']; 

$update = ("UPDATE site_user SET dateupdated = now(),ip = '$ip' WHERE 
username = '".($_SESSION['username'])."'"); 
$sth_update= $con->prepare($update); 
$sth_update->execute(); 
} 

} 

?> 
+2

发表你试过的东西... – Eggplant 2013-02-26 15:42:35

+1

有一个gander:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers – Nick 2013-02-26 15:43:16

+0

这个线程谈论'sql注入',但它显示了使用准备语句的方法,其中一个是PDO,[如何防止SQL注入在PHP?](http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php) – 2013-02-26 15:43:42

回答

3
$stmt = $db->prepare("UPDATE site_user SET dateupdated=now(), ip=? WHERE username=?"); 
$stmt->execute(array($ip, $_SESSION['username'])); 
$affected_rows = $stmt->rowCount(); 

其中$db是你的连接

再次:A great tutorial

+0

大先生尼克良好的工作的人,我真的很感激 – humphrey 2013-02-26 15:51:25

+0

没问题,交换机好运,相信我值得学习PDO。而且这个教程有很多帮助。 – Nick 2013-02-26 15:52:18

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

// query 
$sql = "UPDATE site_user SET dateupdated = NOW(), ip = ? 
     WHERE username = ?"; 
$q = $conn->prepare($sql); 
$q->execute(array($ip, $_SESSION['username']); 
+0

你这人非常感谢的人 – humphrey 2013-02-26 15:48:56

5

首先,在引导/ config文件中的某个地方连接:

$dsn = 'mysql:dbname=test;host=localhost;charset=utf8'; 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
$pdo = new PDO($dsn, $user, $pass, $opt); 

然后,运行查询

function updateonlinesession(){ 
    global $pdo; 
    if(isset($_SESSION['username']['id'])){ 
     $sql = "UPDATE site_user SET dateupdated=now(),ip=? WHERE username=?"; 
     $pdo->prepare($sql); 
     $pdo->execute(array($_SERVER['REMOTE_ADDR'], $_SESSION['logged'])); 
    } 
} 

确保你使用的所有变量具有正确的值(var_dump($_SESSION)就够了)

+0

你真正的明星ü总是帮助我伟人 – humphrey 2013-02-26 15:53:36

2
function updateonlinesession(){ 
    if(isset($_SESSION['username']['id'])){ 
     $uid = $_SESSION['username']['id']; 
     $page = $_SERVER['REQUEST_URI']; 
     $ip = $_SERVER['REMOTE_ADDR']; 
     $username = $_SESSION['logged']; 

     //Establish your PDO object. 
     $pdo = new PDO("mysql:host=localhost;dbname=mydb", "username", "password"); 

     //Prepare your statement. 
     $stmt = $pdo->prepare("UPDATE site_user SET dateupdate = now(), ip = ? WHERE username = ?"); 
     $stmt->execute(array(
      $ip, 
      $_SESSION['username'] 
     )); 
     $stmt->closeCursor(); 
    } 
} 
+0

赞赏非常感谢,我们需要人们像你 – humphrey 2013-02-26 15:55:24