相关疑难解决方法(0)

使用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万
查看次数

php implode(101)with quotes

扼杀一个简单的数组

看起来像这样

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
Run Code Online (Sandbox Code Playgroud)

那会回来的

 lastname,email,phone
Run Code Online (Sandbox Code Playgroud)

很棒,所以我可能会这样做

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";
Run Code Online (Sandbox Code Playgroud)

现在我有我想要的漂亮的csv字符串

 'lastname','email','phone'
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,我觉得应该有一个可选参数implode我错过了什么?

php csv arrays string implode

106
推荐指数
7
解决办法
10万
查看次数

PHP内爆但在报价中包装每个元素

假设我有一个数组:

 $elements = array('foo', 'bar', 'tar', 'dar');
Run Code Online (Sandbox Code Playgroud)

然后我想建立一个DELETE INSQL查询:

 $SQL = "DELETE FROM elements
               WHERE id IN ('" . implode(',', $elements) . "')";
Run Code Online (Sandbox Code Playgroud)

问题是element数组中的id不是单独引用的.IE查询看起来像:

 $SQL = "DELETE FROM elements
               WHERE id IN ('foo,bar,tar,dar');
Run Code Online (Sandbox Code Playgroud)

解决这个问题的最佳方式是什么?

php implode

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

MySQLi中的SELECT*FROM

我的网站相当广泛,我最近刚切换到PHP5(称我为大器晚成).

我之前的所有MySQL查询都是这样构建的:

"SELECT * FROM tablename WHERE field1 = 'value' && field2 = 'value2'";
Run Code Online (Sandbox Code Playgroud)

这使它非常简单,友好.

我出于明显的安全原因,现在正试图切换到mysqli,并且SELECT * FROMbind_param需要特定参数时,我很难弄清楚如何实现相同的查询.

这句话是否已成为过去?

如果是,如何处理涉及大量列的查询?我真的需要每次都输入它们吗?

php mysqli

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

MySQL Prepared具有可变大小变量列表的语句

你会如何在PHP中编写一个准备好的MySQL语句,每次都需要不同数量的参数?这种查询的一个例子是:

SELECT `age`, `name` FROM `people` WHERE id IN (12, 45, 65, 33)
Run Code Online (Sandbox Code Playgroud)

IN子句id每次运行时都会有不同数量的s.

我脑子里有两种可能的解决方案,但想看看是否有更好的方法.

可能的解决方案1使语句接受100个变量,并使用保证不在表中的虚拟值填充其余变量; 多次调用超过100个值.

可能的解决方案2不要使用准备好的声明; 构建并运行查询严格检查可能的注入攻击.

php mysql sql prepared-statement

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

一个准备好的语句,`WHERE .. IN(..)`查询和排序 - 用MySQL

想象一下,我们有一个查询:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
Run Code Online (Sandbox Code Playgroud)

以及要获取的ID数组: $ids = array(1,5,18,25)

准备好的陈述,建议准备一个陈述并多次调用:

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;');
foreach ($ids as $id){
    $stmt->bind_params('i', $id);
    $stmt->exec();
    }
Run Code Online (Sandbox Code Playgroud)

但现在我必须手动对结果进行排序.我有什么好的选择吗?

php mysql mergesort mysqli prepared-statement

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

我有一个整数数组,如何在mysql查询中使用每一个(在php中)?

我有一个充满随机内容项ID的数组.我需要运行一个mysql查询(数组中的id进入WHERE子句),使用数组中的每个ID,按照它们出现在所述数组中的顺序.我该怎么做?

对于数组中的每个ID,这将是一个UPDATE查询.

php mysql arrays

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

如何在mysqli预处理语句中使用IN子句

我正在使用预处理语句将一些旧代码移动到新的msqli接口,我在使用包含IN子句的SQL语句时遇到问题.我通常会这样做:

$ids = '123,535,345,567,878'
$sql = "SELECT * FROM table WHERE id IN ($ids)";
$res = mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)

将其转换为mysqli和预处理语句我尝试了许多解决方案:

$ids = '123,535,345,567,878'
$ids = implode($ids,',');
$result = $msqli->prepare("SELECT foo,blar FROM table WHERE id IN (?));
$result->bind_param("i", $ids);
$result->execute();
Run Code Online (Sandbox Code Playgroud)

上面的操作失败并计算了数组中的元素数量并改变了SQL字符串中的问号数量,并且对数组中的每个元素调用bind_parm也失败了.仅使用逗号分隔的字符串也会失败.

我在谷歌上找不到好的文档,你怎么解决这个问题?

php mysqli sql-in

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

使用call_user_func_array的MySQLI绑定参数

请看下面我的代码.我试图将参数数组绑定到我准备好的语句中.我一直在网上浏览,可以看到我必须使用call_user_func_array,但无法让它工作.我得到的错误是:"第一个参数应该是一个有效的回调,'数组'被给出"我可能是错的,但我假设第一个参数可以是一个数组,也许这个错误信息是误导性的.我认为问题是我的阵列在某种程度上是错误的.谁能看到我做错了什么?谢谢.

$type = array("s", "s");
$param = array("string1","anotherstring");

$stmt = $SQLConnection->prepare("INSERT INTO mytable (comp, addl) VALUES (?,?)");

$params = array_merge($type, $param);

call_user_func_array(array(&$stmt, 'bind_param'), $params);
$SQLConnection->execute();
Run Code Online (Sandbox Code Playgroud)

php mysqli bind

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

MySQLi使用IN运算符编写语句

我必须使用INoperator 从数据库中选择一些行.我想用准备好的声明来做.这是我的代码:

<?php
$lastnames = array('braun', 'piorkowski', 'mason', 'nash');
$in_statement = '"' . implode('", "', $lastnames) . '"'; //"braun", "piorkowski", "mason", "nash"

$data_res = $_DB->prepare('SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN (?)');
$data_res->bind_param('s', $in_statement);
$data_res->execute();
$result = $data_res->get_result();
while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    ...
}
?>
Run Code Online (Sandbox Code Playgroud)

但是,尽管数据库中存在所有数据,但不返回任

还有一个:如果我$in_statement直接传递查询并执行它,将返回数据.所以问题出现在准备上.

我在谷歌寻找这个问题,但并没有"成功".我的代码出了什么问题?
谢谢您的帮助!

php sql mysqli prepared-statement

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

标签 统计

php ×10

mysqli ×5

mysql ×4

arrays ×3

prepared-statement ×3

implode ×2

sql ×2

bind ×1

csv ×1

mergesort ×1

sql-in ×1

string ×1