3

例如,在我准备好的声明中的命名占位符中,我可以拥有:

<?php
$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

->bindValuewith是否会使用 " " 或 " " PHP 函数或以其他方式PDO::PARAM_INT检查 the$id是否真的是一个整数,如果不是with set set 所期望的,它会失败并崩溃吗?is_intis_numeric$id->bindValuePDO::PARAM_INT

我是 PDO MySQL 的新手,我也想知道:

$stmt->bindValue(':name', $name, PDO::PARAM_STR);

修复任何编码问题,如果考虑到$name,它可以自动处理修剪和条带标签吗?

4

1 回答 1

2

将 ->bindValue 与 PDO::PARAM_INT 检查 $id 是否真的是一个整数使用

它不会被检查。将变量绑定为 PARAM_INT 将使 PHP(int)"123"首先将其转换为整数。不会发生错误,非数字字符串将被简单地强制转换为零。另请参阅关于字符串转换为数字的 PHP 手册。

... PDO::PARAM_STR);
修复在 $name 中的任何编码问题,它是否也可以自动处理修剪和条带化标签?

对于字符串类型的参数,将不会自动修剪或转换传递的值。

如果输入字符集与数据库字符集不同,则编码将由 PDO 驱动程序或接收数据库服务器进行调整。但仅此而已。

于 2012-10-14T00:23:38.860 回答