Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在哪里使用原始查询/胶囊管理器_Php_Sql_Eloquent - Fatal编程技术网

Php 在哪里使用原始查询/胶囊管理器

Php 在哪里使用原始查询/胶囊管理器,php,sql,eloquent,Php,Sql,Eloquent,我想使用原始查询以雄辩的方式编写此查询: INSERT INTO table SELECT * FROM other_table WHERE other_table_id IN (1,2,3) 我试着这样写: use Illuminate\Database\Capsule\Manager as DB; $insert_db = DB::select("SELECT products_id FROM products WHERE products_id IN (?)", [[265792,265

我想使用原始查询以雄辩的方式编写此查询:

INSERT INTO table SELECT * FROM other_table WHERE other_table_id IN (1,2,3)
我试着这样写:

use Illuminate\Database\Capsule\Manager as DB;
$insert_db = DB::select("SELECT products_id FROM products WHERE products_id IN (?)", [[265792,265787,265743]])
但这给了我一个空数组

使用capsule manager编写此文件的正确方式是什么?我绝对需要使用DB::select来完成它

在2013年,他也在问同样的问题。当时是不可能的。那么,这种情况今天发生了变化吗?我们能在最新版本的《雄辩》中使用WHERE吗?知道我需要使用吗?为了安全起见,不要连接字符串,否则使用PDO将毫无意义

编辑:

问题更多的是关于动态值。我不能使用:

DB::select("SELECT products_id FROM products WHERE products_id IN (?, ?, ?)", [265792,265787,265743]);
因为阵列[265792265787265743]正在其他地方构建。想象一下下面的代码

foreach($test as $k => $v) {
    $arr[] = $v['something']
}

DB::select("SELECT products_id FROM products WHERE products_id IN (?)", [[$arr]]);

每个绑定都需要一个占位符:

$placeholders = implode(', ', array_fill(0, count($arr), '?'));
DB::select("SELECT products_id FROM products WHERE products_id IN ($placeholders)", [$arr]);
在Laravel/Elount 5.7.17+中,您可以使用插入:


请注意,该方法要求您指定列名['foo','bar']。

生成?占位符的更简洁方法是使用:

编辑1 为了处理数组中没有项目的情况,我使用了以下函数:

function in($arr)
{
  return count($arr) > 0 ? str_repeat('?,', count($arr) - 1) . '?' : false;
}
实例


语法错误,您希望插入到。。。WHERE SELECT products_id FROM tbl WHERE IN…@Script47是的,我将查询更改为一个更简单的示例,因为我未能重写insert查询的简化版本:-请看一看“但结果是给了我一个空数组”-这些值是否有实际存在的行?@Script47当然,否则我就不会发布这个问题了。从265792265787265743中的products_id没有给出结果的products_id中选择products_id。问题是如何使用雄辩的方法获得这些结果PDO@JonasStaudenmeir我用的是最新版本的雄辩。我没有用拉威尔。根据我的标签。这可能不是最干净的答案,但它是一个正确的答案,尽管如此,我希望雄辩有一个内置的方法来做到这一点。。。谢谢我添加了一个替代解决方案。如果我在不久的将来使用DB::table,我会记住这一点,再次感谢。如果count$arr等于零,这将不起作用。因为它总是给1?当count$arr==0时,我们不需要感叹号。如果没有结果,在mysql中,false不会返回错误?我想,您应该首先验证数组,如果值存在,请运行where in,否则,请不要执行此操作,并给出错误消息,因为未传递正确的值或类似的内容。@GiveMeFreedomOrGiveMeFire使用预编辑代码并在查询之前验证以检查数组是否有值。
$in = str_repeat('?,', count($arr) - 1) . '?';
function in($arr)
{
  return count($arr) > 0 ? str_repeat('?,', count($arr) - 1) . '?' : false;
}