- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道这个问题已经被问过 1000 次了,但出于某种原因我继续用头撞墙..
这个有效:
$sql = 'SELECT a.eventCode, a.eventTime, a.teamCode, a.playerCode, b.lastName, b.firstName, b.number, a.xCoord, a.yCoord, a.id ';
$sql = $sql . 'FROM events a, players b ';
$sql = $sql . 'WHERE a.regGUID in ( ' . $regGUID . ' ) and ';
$sql = $sql . 'a.playerCode=b.playerCode and a.gameCode = "' . $game . '" order by a.eventTime desc, a.actionCode asc';
$stmt = $db->prepare($sql);
$results = $stmt->execute();
这不是:
$sql = 'SELECT a.eventCode, a.eventTime, a.teamCode, a.playerCode, b.lastName, b.firstName, b.number, a.xCoord, a.yCoord, a.id ';
$sql = $sql . 'FROM events a, players b ';
$sql = $sql . 'WHERE a.regGUID in ( :regGUID ) and ';
$sql = $sql . 'a.playerCode=b.playerCode and a.gameCode = :game order by a.eventTime desc, a.actionCode asc';
$stmt = $db->prepare($sql);
$stmt->bindValue(':regGUID', $regGUID, PDO::PARAM_STR);
$stmt->bindValue(':game', $game, PDO::PARAM_STR);
$results = $stmt->execute();
我错过了什么?谢谢
最佳答案
问题出在这里:
$sql = $sql . 'WHERE a.regGUID in ( :regGUID ) and ';
$stmt->bindValue(':regGUID', $regGUID, PDO::PARAM_STR);
我假设 $regGUID 是一个逗号分隔的引用字符串列表。
每个查询参数只接受一个标量值。不是值的列表。
所以你有两个选择:
继续插入 $regGUID 字符串,即使您使用其他标量值的参数。但是您仍然要小心避免 SQL 注入(inject),因此您必须正确形成 $regGUID 字符串。您不能只对整个字符串调用 PDO::quote() ,这会使它成为包含 UUID 和逗号的单引号字符串。您必须确保每个 UUID 字符串都被转义并单独引用,然后将列表分解在一起并将其插入到 IN 子句中。
$regGUIDs = explode(',', $regGUID);
$regGUIDs = array_map(function ($g) { return $db->quote($g); }, $regGUIDs);
$regGUID = implode(',', $regGUIDs);
$sql = $sql . 'WHERE a.regGUID in (' . $regGUID . ') and ';
explode()
将$regGUID 放入一个数组中,并为数组中的每个元素添加一个查询参数。插入查询参数占位符的动态列表。
$regGUIDs = explode(',', $regGUID);
$params = array_fill(1, count($regGUIDs), '?');
$sql = $sql . ' WHERE a.regGUID in ( ' . implode(',', $params) . ' ) and ';
您可以在数组的循环中使用 bindValue(),但请记住,其他参数也应按位置而不是名称进行绑定(bind)。当您尝试在同一个查询中混合使用两种不同样式的参数时,PDO 有一些错误会让它不高兴。
我没有使用 bindValue(),而是将一个参数值数组传递给 PDOStatement::execute(),这要容易得多。
$paramValues = $regGUIDs;
$paramValues[] = $game;
$results = $stmt->execute($paramValues);
关于php - PDO PHP bindValue 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416601/
我在数据库中有一个文本数据类型,想要输入 true 或 false 值。如果我使用带有 BindParam 的 Mysqli 或 PDO 可以正常工作,它会添加 1 或 0,但是当我尝试使用 Bind
这个问题在这里已经有了答案: Why does this PDO statement silently fail? (2 个答案) 关闭 21 天前。 我对 PDO 很陌生。 我尝试制作一个登录页面
我的 DELETE 查询方法有一个“小”问题。这段代码没有给出任何错误,所以它应该可以工作。但是数据库内部没有任何变化,我想删除的行仍然存在。 主要问题可能出在这里: $query = $this->
我发现一些关于bindvalue的问题,但找不到解决方案。这是我的代码,如果输入像“abc@aaamail.com”这样的电子邮件,它会很好用,但我的问题是当用户输入像“abc.def@aaamail
我正在尝试使用 PHP、SQL、PDO 创建一个基本评级函数,它将用户给出的评级值添加到“recipe_ rating”字段,然后将 1 添加到“recipe_ ratingcounter”字段。 但
我有这样的问题 select Count(1) as Count, pt.Name as TypeName, pt.ID as TypeID, pc.ID as CatID, o.Name as Of
有些奇怪的事情正在发生,因为 PDO 应该逃避任何 XSS 这是我的 PDO 类 dbh != null) return $this->dbh; $dsn =
我是 PHP 的 PDO 的新手,我的数据库类的一个函数有点问题: function set($query, $args = array()) { try { $query = $this
我对 php 中的 bind* 函数有疑问 我的代码是: $this->db_conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_na
当我使用 bindValue 准备语句时,如果占位符被单引号括起来,则它不会被替换。这是有问题的,因为在 SQL 中字符串被单引号包围以避免关键字冲突。请参阅我的附件,其中包含一次插入单引号和一次不插
PDOStatement::bindParam — 绑定一个参数到指定的变量名。 绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符。 不同于 PDOStatement::b
我正在使用 PHP 和 PDO for PostgreSQL。当我尝试将特定值绑定(bind)到查询中时,出现了奇怪的行为。我有以下内容: $value[0][$i] = "'%{$filterval
我在各种网站上查看了一个多小时,但我无法解决我的问题。 所以这是有效的代码: $animes = array(); $q = $this->_db->query('SELECT id, nom
我知道这个问题已经被问过 1000 次了,但出于某种原因我继续用头撞墙.. 这个有效: $sql = 'SELECT a.eventCode, a.eventTime, a.teamCode, a.p
PDOStatement::bindParam() 之间有什么区别?和 PDOStatement::bindValue() ? 最佳答案 来自 the manual entry for PDOStat
这个问题在这里已经有了答案: Use bound parameter multiple times (5 个答案) 关闭 3 年前。 我对 ODBC 的 PDO 语句有疑问。 我在 Windows
我在 pdo 方面遇到了一个大问题,似乎没有人能够帮助我 - 所以我决定问你们:-) try { $links = $database->prepare("SELECT * FROM aTab
这个问题已经有答案了: PHP - Using PDO with IN clause array (9 个回答) 已关闭 5 年前。 我的这个查询没有返回任何内容。它不会抛出任何错误。在该网站上找不到
我正在编写一个类,它以编程方式创建一个给定特定列名的表。我正在使用 PDO 准备好的语句,这似乎导致了一些问题。 基本流程如下: // create a query string to be sent
我吓坏了,不知道出了什么问题。我对 PDO 还很陌生,但是除了作为字符串发送的 bool 值之外,所有内容都可以在我的代码中运行。 我的代码(简化): $sql = 'SELECT * FROM pa
我是一名优秀的程序员,十分优秀!