当前位置: 首页 > 知识库问答 >
问题:

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

杜建章
2023-03-14

我当前有一个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个答案

谢墨竹
2023-03-14

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

$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();
 类似资料:
  • 我有一个脚本需要在一个语句中插入多个内容,比如 长sql是基于条件串联的,并且需要这么长。在phpmyadmin中使用这种sql语句是有效的,并且插入它没有问题,但是JAVA会吐出一个错误。 我可以做些什么来插入这种sql,或者我应该重做我的代码来启动几次以达到相同的结果吗?

  • 问题内容: 这个问题已经在这里有了答案 : 我可以将数组绑定到IN()条件吗? (21个回答) 2个月前关闭。 我对PDO有一个问题,在困扰了一段时间后,我真的很想得到答案。 举个例子: 我将ID数组绑定到PDO语句,以便在MySQL IN语句中使用。 该数组将说: $ values = array(1,2,3,4,5,6,7,8); 数据库安全变量为 $ products = implode(’

  • 问题内容: 这个问题已经在这里有了答案 : 我可以使用PDO准备好的语句来绑定标识符(表或字段名)或语法关键字吗? (1个答案) 去年关闭。 是否可以在准备好的MySQL语句中将列名作为参数传递?请看以下示例: PDO 在每个参数周围添加,因此上面的中线变为: 哪个MySQL不喜欢。有没有一种方法可以在PDO语句中包含字段名的参数,并接受它们? 否则,我猜我将不得不编写一些不同的PDO语句,具体取

  • 问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助。 7年前关闭。 这行不通吗?还是我做错了?尝试了多种形式,似乎找不到关于该主题的任何可靠信息。有任何想法吗? 问题答案: 如果是一个自我陈述。这就像一个完整的声明。因此,不能在字符串左右连接之间使用它。更好的解决方案是使

  • 问题内容: 这个问题已经在这里有了答案 : 我的PDO声明无效 (1个答案) 2年前关闭。 我正在尝试使用PDO准备好的语句为MySQL数据库上的查询创建正确的错误处理。我希望程序在检测到准备好的语句过程中出现错误时退出。利用PDO准备好的语句过程中的每个步骤都会在失败时返回的事实,我将这种令人讨厌的技巧归纳为: 通过执行以下操作: 两件事情。首先,这是非常冗长而愚蠢的。肯定有更好的办法。显然,我

  • 这样不行吗?还是我做错了?尝试了多个变体,但似乎找不到任何关于这个主题的可靠信息。有什么想法吗?