相关疑难解决方法(0)

我可以将数组绑定到IN()条件吗?

我很想知道是否可以使用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)

这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?

php arrays pdo prepared-statement where-in

549
推荐指数
17
解决办法
20万
查看次数

使用WHERE子句将数组传递给查询

给定一组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?

php mysql arrays

303
推荐指数
12
解决办法
54万
查看次数

WHERE IN子句与PDO的绑定参数

我的代码:

$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,但是当我跳过参数化并只是将变量本身添加到其中时,我得到一个准确的计数.这里发生了什么?

php mysql pdo

13
推荐指数
2
解决办法
1万
查看次数

PDO绑定未知数量的参数?

$statement = $db->prepare('SELECT blah FROM blah_table WHERE blahID IN (:a, :b, :c)');
Run Code Online (Sandbox Code Playgroud)

如果在运行时之前参数的数量未知,该怎么办?我唯一能想到的就是构建一个sql字符串,以便根据需要制作尽可能多的参数占位符.

php pdo

12
推荐指数
2
解决办法
4295
查看次数

PHP - PDO - 如何只用一个查询获取多行?

首先,我是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方法且只使用一个查询的情况下从数据库中获取多个特定行?

感谢您提前的答案和时间.

对不起,如果之前有问题.

php database pdo rows fetch

6
推荐指数
2
解决办法
1万
查看次数

'where in'子句中的PDO绑定值不起作用

我试图使用"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

php sql pdo where bindvalue

5
推荐指数
1
解决办法
534
查看次数

将数组传递给mysql

我目前有一个值数组(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)

php mysql

0
推荐指数
2
解决办法
2万
查看次数

为什么此查询不会从所有表中删除详细信息?

我试图在删除用户时从匹配用户 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)

我可能做错了什么?

php mysql pdo

0
推荐指数
1
解决办法
83
查看次数

标签 统计

php ×8

pdo ×6

mysql ×4

arrays ×2

bindvalue ×1

database ×1

fetch ×1

prepared-statement ×1

rows ×1

sql ×1

where ×1

where-in ×1