我是 PHP 新手,但不是编程新手。来自 ASP [经典] 背景。简而言之,我使用的是 PHP 5.4,在 IIS7 和 SQL Server 2005 Express 上使用 FastCGI。我已经学习了基础知识,并且花了相当长的时间研究安全性。
我正在清理 GET 和 POST 输入数据。我的数据库连接字符串位于 Web 根目录之外的单独文件中。我正在使用带有命名占位符以及 db 存储过程的 PDO 准备语句 [尽管我听说查询 + 引用执行得更快]。
我试图理解为什么我需要在 bindParam 函数中使用其他参数,特别是数据类型选项“PDO::PARAM_STR, 12”[该示例中的第二个参数表示数据长度对吗?]。
在 bindParam 中指定数据类型和长度有什么好处?如果我正在使用已经指定数据类型和长度的存储过程,是否需要它?另外,我相信我需要使用“PDO::PARAM_INPUT_OUTPUT”之类的东西来从存储的过程中返回一个值?
谢谢!
** 编辑 **
出于某种原因,如果我使用 PDO::PARAM_STR 参数,我存储的过程似乎不会将数据写入数据库。所以我省略了那个论点。这是我的代码:
$sql1 = $conn->prepare("EXEC insert_platts :userAgent, :userIp, 1, :source");
$sql1->bindParam(':userAgent', $userAgent);
$sql1->bindParam(':userIp', $userIp);
$sql1->bindParam(':source', $source);
$sql1->execute();
此外,我没有从存储的过程中返回标识值,而是使用 lastInsertId() 代替:
$lastRow = $conn->lastInsertId();
print $lastRow;