【发布时间】:2014-08-10 07:28:02
【问题描述】:
我尝试将我的非安全查询替换为 PDO(防止 SQL 注入),但我不相信自己在做什么。 我有数据库连接文件:
<?php
$serverName ="db_name\SQLEXPRESS";
$usr="sa";
$pwd="SysAdmin1";
$db="DB";
$connectionInfo = array("UID" => $usr, "PWD" => $pwd, "Database" => $db);
$conn = sqlsrv_connect($serverName, $connectionInfo);
?>
还有我的查询文件:
require_once 'db_file.php';
$place=$_POST['place'];
$name=$_POST['name'];
$sql_user = "SELECT * FROM users WHERE name='$name' and place= '$place' ";
$res = sqlsrv_query($conn,$sql_user);
$row = sqlsrv_fetch_array($res);
它工作正常但不安全。我尝试替换为:
$sql_user = $conn -> prepare ("SELECT * FROM users WHERE name = :name and place = :place");
$sql_user -> execute (array(':name => '$name' , :place => '$place''));
$row = $sql_user -> fetch();
我有错误解析错误:语法错误,意外的 T_VARIABLE,期待 ')'。我读了很多关于那个的帖子,但没有支持我做得好还是没有?因为有时查询中的变量是 :name 有时只是?
【问题讨论】:
-
将
(':name => '$name' , :place => '$place'')更改为(:name => $name , :place => $place)只是几个错位的引号。我改为删除它们。您也可以使用(':name' => '$name' , :place => '$place'),但不需要引号。 -
感谢@Fred-ii- 我有:致命错误:在非对象中调用成员函数 prepare()
-
(':name' => "$name" , ':place' => "$place")怎么样 -
您可能还需要将
$row = $sql_user -> fetch();更改为while ($row = $sql_user->fetch(PDO::FETCH_ASSOC)){$var = $row['name']; echo $var; }- 我不知道您想对 fetch 做什么。 -
@Fred-ii- 两者都工作正常,但我目前有致命错误
标签: php sql sql-server pdo