在php中使用mysql可以用$ var替换$ var吗?

时间:2015-11-12 15:07:03

标签: php mysql

我在这里搜索了同名的主题,但我没有找到与我的相关的任何内容。我按照教程和sql

$sql .= "WHERE event_id = :id LIMIT 1"

我看到作者使用了:id。我以为应该是$ id。我不知道这个php表示法。请有人告诉我发生了什么事?谢谢。

3 个答案:

答案 0 :(得分:3)

这称为parameter binding。目的是防止SQL注入。

示例:

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>

http://php.net/manual/en/pdostatement.bindparam.php

这是一个很好的解释: How can I prevent SQL injection in PHP?

答案 1 :(得分:2)

$sql = "UPDATE client SET password = :password, phone = :phone  WHERE id = :id;";

$query = $this->pdo->prepare($sql);

$params = array(
        ':id' => $ClientId, 
        ':password' => $password,
        ':telephone' => $phone
); 

$query->execute($params)

它是带有PDO的mySQL的预准备语句的语法。 你可以这样做:

$sql = "UPDATE client SET password = $password, phone = $phone  WHERE id = $ClientId;";
$query = $this->pdo->query($sql);

我使用&#34;扩展PDO&#34;在构造函数上,我使用&#34; $this->pdo = new PDO($dsn, $user, $pass, $options);&#34;

初始化连接

答案 2 :(得分:1)

非常感谢lad2025和samlev告诉我这叫做参数绑定。我发现一个例子对其他人来说非常容易,可能会有像我一样的问题:

$sth = $dbh->prepare ("INSERT INTO animal (name, category)
VALUES (:name, :cat)");
$sth->bindValue (":name", "ant");
$sth->bindValue (":cat", "insect");
$sth->execute ();
$sth->bindValue (":name", "snail");
$sth->bindValue (":cat", "gastropod");
$sth->execute ();