Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是什么意思?_Php_Prepared Statement - Fatal编程技术网

Php 这是什么意思?

Php 这是什么意思?,php,prepared-statement,Php,Prepared Statement,我在谷歌搜索的一些代码示例中发现了这一点: $sql = 'INSERT INTO users (username,passwordHash) VALUES (?,?)'; 这对我来说是新的,但我猜这是一种替代方法,相当于 $sql = "INSERT INTO users (username,passwordHash) VALUES ($username,$passwordHash)";` 或 $sql = 'INSERT INTO users (username,passwordHas

我在谷歌搜索的一些代码示例中发现了这一点:

$sql = 'INSERT INTO users (username,passwordHash) VALUES (?,?)';
这对我来说是新的,但我猜这是一种替代方法,相当于

$sql = "INSERT INTO users (username,passwordHash) VALUES ($username,$passwordHash)";` 

$sql = 'INSERT INTO users (username,passwordHash) VALUES (' . $username . ',' . $passwordHash . ')';`
是这样吗?这是一个实际的PHP语法,还是他只是想简化他的示例


感谢您的反馈,各位

这在中国很常见。
仅用作占位符,如PHP文档所示:

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();

不一样。问号用于准备好的语句查询。这些基本上允许您多次运行同一个查询,而系统只对查询进行一次解析。

问号是准备好的SQL语句中值的占位符,是一种重要的保护。除非每个用户都用引号*括起他们的名字,并且您用引号括起密码散列,否则您的第一个备选方案将无法正常工作。您的第二个备选方案容易受到SQL注入攻击

使用占位符,可以在执行SQL时传递占位符的值


*Tim O'Reilly知道他真的必须键入“
”Tim O'Reilly”

而且几乎不需要精细的
->bindParam
列表。只需使用
->execute(array($name,$value))
调用推送所有参数即可。