我很想知道是否可以使用PDO将值数组绑定到占位符.这里的用例试图传递一个值数组以用于IN()条件.
我希望能够做到这样的事情:
<?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
'SELECT *
FROM table
WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)
并让PDO绑定并引用数组中的所有值.
目前我正在做:
<?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
$val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
'SELECT *
FROM table
WHERE id IN('.$in.')'
);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)
这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?
给定一组id $galleries = array(1,2,5)我想要一个SQL查询,它在WHERE子句中使用数组的值,如:
SELECT *
FROM galleries
WHERE id = /* values of array $galleries... eg. (1 || 2 || 5) */
Run Code Online (Sandbox Code Playgroud)
如何生成此查询字符串以用于MySQL?
我的代码:
$myArray = implode($myArray, ',');
$sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)');
$sth->bindParam(':ids', $myArray);
$sth->execute();
$result = $sth->fetch();
echo $sth->rowCount();
Run Code Online (Sandbox Code Playgroud)
始终显示计数为1,但是当我跳过参数化并只是将变量本身添加到其中时,我得到一个准确的计数.这里发生了什么?
$statement = $db->prepare('SELECT blah FROM blah_table WHERE blahID IN (:a, :b, :c)');
Run Code Online (Sandbox Code Playgroud)
如果在运行时之前参数的数量未知,该怎么办?我唯一能想到的就是构建一个sql字符串,以便根据需要制作尽可能多的参数占位符.
首先,我是PDO的新手.我正在做一个小项目来提高自己.
我正在使用这样的代码从我的数据库中获取单行:
$sql = "SELECT * FROM users WHERE ID = 1";
$sql_prepare = $db -> prepare($sql);
$result = $db -> query($sql);
$user = $result -> fetch(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
并回显该行的任何结果:
echo $user['ID'];
echo $user['Name'];
Run Code Online (Sandbox Code Playgroud)
我只需要使用一个查询就可以从我的数据库中获取多行.我不想一遍又一遍地查询我需要的每一行.
我想到的第一件事就是尝试这个:
$sql = "SELECT * FROM users WHERE ID = 1 AND ID = 4 AND ID = 17";
$sql_prepare = $db -> prepare($sql);
$result = $db -> query($sql);
$user = $result -> fetch(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
但它没有按预期工作.我研究了几个小时的编码论坛,但所有答案都是关于使用fetchAll方法,然后使用foreach循环输出结果.我不想通过加载整个数据库表来拉紧代码.我只想使用一个查询从我的数据库加载特定的行.
所以我的问题是:
如何在不使用fetchAll方法且只使用一个查询的情况下从数据库中获取多个特定行?
感谢您提前的答案和时间.
对不起,如果之前有问题.
我试图使用"where in"子句获取顶级信息但如果我使用bindvalue或bindparam我没有得到任何结果.
这是我的查询没有给出任何结果
$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = :ip)");
$user2->bindValue(':ip','127.0.0.1',PDO::PARAM_STR);
$user2->execute();
Run Code Online (Sandbox Code Playgroud)
如果我使用没有任何绑定值或参数的直接搜索,我会得到结果
$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = '127.0.0.1')");
$user2->execute();
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我在这个搜索'where in'子句中使用bindvalue或param吗?
@PhilCross这是我在使用var_dump时得到的:
object(PDOStatement)#4 (1) { ["queryString"]=> string(142) "Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = :ip)"
Run Code Online (Sandbox Code Playgroud)
Ps:我正在使用MSSQL Server
我目前有一个值数组(business_id的)
让我们说吧
Array
(
[0] => 12
[1] => 14
[2] => 15
)
Run Code Online (Sandbox Code Playgroud)
使用这些值中的每一个从数据库中获取每个business_id的关联行信息的最佳方法是什么.
可以是一对一的查询是我的问题.显然,你可以做到
$q = "select * from business where business_id = 12";
$rs = mysql_query($q);
Run Code Online (Sandbox Code Playgroud) 我试图在删除用户时从匹配用户 ID 的表中删除记录。但不知何故,它只从 cv 表中删除记录。
我正在尝试的是
if($_GET['deluser'] !='1'){
$qr = "delete from members where member_id IN(".$_GET['deluser'].")";
$qr = "delete from company where caller_id IN(".$_GET['deluser'].")";
$qr = "delete from cv where agent_id IN(".$_GET['deluser'].")";
$st = $db->prepare($qr);
$st->execute();
header('Location: users.php?action=DELETED');
exit;
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么?