2012-10-28 100 views
0

我试图将我的旧的PHP SQL脚本到PDO,但它使用户点设置为0,而不是增加+15PDO更新设置字段值为0?

继承人的原

<?php 

session_start(); 
$db = mysqli_connect("host", "username", "password", "dbname"); 
$username = $_SESSION['username']; 
mysqli_query($db, "UPDATE login_users SET Points=Points+15 WHERE username='$username'"); 


?> 

这里是PDO声明我试图创建。我的语法错了吗?

<?php 

session_start(); 
$db = new PDO('mysql:host;dbname=dbname;charset=UTF-8', 'username', 'password'); 
$username = $_SESSION['username']; 
$Points = $db->exec("UPDATE login_users SET Points='Points+15' WHERE username='$username'"); 


?> 
+2

同样的,对动态输入的,而不是(转义!)串插中使用绑定变量。 – DCoder

+0

谢谢你提及! –

回答

4

'Points + 15'是一个文字。你需要它没有单引号。

​​

更重要的是,以参数化的优势:

$Points = $db->prepare("UPDATE login_users SET Points=Points+15 WHERE username=?"); 
$Points->execute(array($username)) 
+0

作为一个旁注,你也可以指出如何通过'$ username'作为参数,使查询变得更加有效。会话可能变得污染,然后SQL注入成为可能。防止这一点。 – hakre

+0

@hakre真实,只是更新了我的答案。 –

+0

@Asad哇!我从中学到了很多东西。非常感谢! –

2

摆脱这些报价

SET Points='Points+15' WHERE 
+0

感谢您的贡献! –