2013-02-21 50 views
-2

以前在即将被弃用的正常mysql的功能,我有:在PHP中为MySQL编写语句,我在做什么错误?

​​

这是我现在,想完成同样的事情:

// On first connect to database, create a user to hold data for users not logged in 
    $stmt = $db->prepare("SELECT id FROM users WHERE id = ?"); 
    $stmt->execute(1); 
    $stmt->store_result(); 
    if ($stmt->num_rows == 0) { 
     $stmt = $db->prepare("INSERT INTO users (id, username, email, password) VALUES (?, ?, ?, ?)"); 
     $stmt->execute(1, 'anonymous', 'anonymous', password_hash("noidentity", PASSWORD_BCRYPT)); 
    } 

我不断收到错误“警告:mysqli_stmt :: execute()期望完全为0参数,1给出”看起来它期望1,因为我有1个问号,但我显然做错了。

我是否正确地处理以下问题?

$stmt = $db->prepare("UPDATE users SET wins = wins + 1 WHERE id = ?"); 
$stmt->execute($_SESSION["id"]); 

我应该有吗?为胜=部分?如果是这样,那么如果它取决于当前的那个价值,那么我将如何填写该价值?

什么:

$stmt = $db->prepare("SELECT id, username, password FROM users WHERE email = ?"); 
$stmt->execute($email); 
$row = $stmt->fetch(); 

if (password_verify($password, $row["password"])) { 

我这样做是正确的呢?

我只是想把握这些准备好的陈述以达到安全目的,并且发现它有点困难。

回答

2

使用此代码,您必须使用bind_param来设置数据。

$stmt = $db->prepare("SELECT id FROM users WHERE id = ?"); 
$stmt->bind_param('i', 1); 
$stmt->execute(); 
+0

我是什么,为什么? – 2013-02-21 04:25:57

+0

'i'is是整数数据。 's'用于字符串数据。 – 2013-02-21 04:26:40

+1

@DougSmith如果你想在'execute'中绑定param,请尝试PDO。 – Passerby 2013-02-21 04:31:15

相关问题