相关疑难解决方法(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万
查看次数

SQL固定值IN()与INNER JOIN性能

在回答这个SQL问题时,我遇到一个声明,即固定值IN()运算符比INNER JOIN使用相同内容慢得多,以至于最好为值创建临时表并加入它们.它是真的(通常,使用MySQL,任何其他SQL引擎),如果是 - 为什么?直观地说,IN应该更快 - 你将潜在匹配与已经在内存中并且需要格式的固定值集进行比较,而使用JOIN,你必须查阅索引,可能从磁盘加载数据,并执行IN可能不需要的其他操作.我错过了重要的事吗?

请注意,与这个问题不同,它有很多重复,我说的是IN()有固定的值集,而不是子查询.

mysql sql

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

mysqli bind_param用于字符串数组

我不能让这个工作.我现在已经花了很多时间.

这有效:

$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno)
{
    return;
}
$query_str= "SELECT name FROM table WHERE city IN ('Nashville','Knoxville')";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{       
    $query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)

但是我不能让它与这样的bind_param一起工作:

$query_str= "SELECT name FROM table WHERE city IN (?)";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{       
    $cities= explode(",", $_GET['cities']);
    $str_get_cities=  "'".implode("','", $get_cities)."'"; // This equals 'Nashville','Knoxville'

    $query_prepared->bind_param("s", $cities);
    $query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我也试过call_user_func_array,但似乎无法使语法正确.任何帮助将不胜感激!

编辑:我已经严格尝试了moskito-x的建议和大量的例子列在这里以及其他在SO和随机网站上,没有任何作品.我认为问题可能是PHP 5.4,这就是我的MAMP现在设置的.

php mysqli bindparam

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

标签 统计

php ×2

arrays ×1

bindparam ×1

mysql ×1

mysqli ×1

pdo ×1

prepared-statement ×1

sql ×1

where-in ×1