提问者:小点点

无法在pdo语句[重复]中串联sql


我当前有一个Get变量

$name = $_GET['user'];

我正尝试将其添加到sql语句中,如下所示:

$sql = "SELECT * FROM uc_users WHERE user_name = ". $name;

然后运行

$result = $pdo -> query($sql);

我得到一个无效的列名。但这是没有意义的,因为如果我手动将请求这样放入

$sql = "SELECT * FROM uc_users WHERE user_name = 'jeff'";

我获取列数据,只是当我将其作为get变量输入时没有。我做错了什么。我对PDO比较陌生。

更新:现在我有以下内容:

$name = $_GET['user'];

而且

$sql = "SELECT * FROM uc_users WHERE user_name = :name";
    //run the query and save the data to the $bio variable
    $result = $pdo -> query($sql);
    $result->bindParam( ":name", $name, PDO::PARAM_STR );
    $result->execute();

但我得到了

> SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
> error in your SQL syntax; check the manual that corresponds to your
> MySQL server version for the right syntax to use near ':name' at line
> 1

共1个答案

匿名用户

要使带有变量的查询像不带变量的查询一样工作,您需要在变量周围加上引号,因此将查询更改为:

$sql = "SELECT * FROM uc_users WHERE user_name = '$name'";

但是,这容易受到SQL注入的攻击,所以您真正想要的是使用一个占位符,像这样:

$sql = "SELECT * FROM uc_users WHERE user_name = :name";

然后按您现有的方式准备:

$result = $pdo->prepare( $sql );

接下来,绑定参数:

$result->bindParam( ":name", $name, PDO::PARAM_STR );

最后,执行它:

$result->execute();