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))
调用推送所有参数即可。