我当前有一个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
要使带有变量的查询像不带变量的查询一样工作,您需要在变量周围加上引号,因此将查询更改为:
$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();