我有一个包含30k项目的数组,而implode什么都不返回.没有错误信息,没有内存问题,什么都没有.
如果我使用array_slice并将数组切片为100个项目,它可以正常工作.它也适用于7k阵列,但不适用于此阵列.
但是,在另一个主题中我找到了这个代码,它运行得很好:
$arr = array();
for ($i = 0; $i < 50000; $i++) {
$arr[] = str_shuffle('This sentance is of average length, which The Internet says is aboout 14.2 words.');
}
echo implode(PHP_EOL, $arr);
Run Code Online (Sandbox Code Playgroud)
但是使用PHP_EOL我不能在我的选择中使用它,字符串需要用','分隔.
所以我有两个问题:是否有任何方法可以使这项工作,我怎么能抓住这个错误?因为测试implode输出不起作用,is_null,strlen,is_string,empty,isset,所有这些测试都失败了.
我没有运行循环来更新表中的值,而是想使用IN语句(假设它更快?).
我有一系列值:
$array (
1 => Tom
2 => Bob
3 => Sally's String
4 => Pesce is Italian for "fish"
)
Run Code Online (Sandbox Code Playgroud)
我正在使用循环,因为我可以单独准备每个字符串以解决潜在的不良字符:
$sql = "UPDATE table SET data = 1 WHERE my_string = ?";
$s = pdoObject->prepare($sql);
foreach($array as $string){
$s->execute(array($string));
}
Run Code Online (Sandbox Code Playgroud)
我喜欢使用IN语句(再次,假设它更快,请告诉我,如果我错了).问题是,考虑到我的字符串数组中存在不同类型的字符,创建一个IN语句会导致一些错误.例如;
$inString = '"'.implode('","',$array).'"';
// $inString would be "Tom","Bob","Sally's String","Pesche is Italian for "fish"";
Run Code Online (Sandbox Code Playgroud)
有没有正确的方法来准备这种类型的查询?还是"执行多种"类型的功能?我通常会看到长度为5到50个项目的字符串数组.
######为什么这个问题很独特######
我的问题是唯一的问题我可以将数组绑定到IN()条件吗?因为我希望绑定一个字符串数组而不是整数.
我有一个看起来像这样的数组:
array('first' => 'value1', 'second' => 'value2', ...);
Run Code Online (Sandbox Code Playgroud)
如何获取所有密钥并将它们放在逗号分隔的字符串中?
在最后我需要这样的东西来做一个查询:
values IN ('first','second',...)
Run Code Online (Sandbox Code Playgroud)
谢谢
使用bind_param我的所有查询,我现在想要使用IN(?)列表中元素数量可以变化的位置.
我在这里使用基本SQLOUT功能做了$sql_db->prepare,->bind_param,->execute(),->store_result(),->bind_result
// the code below does not work as the query only matches on element 'a':
$locations = ('a','b','c','d','e');
SQLout ("SELECT Name FROM Users WHERE Locations IN (?)",
array('s', $locations), array(&$usrName));
// the code below does work as a brute-force method,
// but is not a viable solution as I can't anticipate the number of elements in $locations going forward:
SQLout ("SELECT Name FROM Users WHERE …Run Code Online (Sandbox Code Playgroud) 我正在将我的所有查询切换为PDO格式,而我特别遇到涉及IN()子句的问题.
$nba[0] = "Boston Celtics";
$nba[1] = "New York Knicks";
$nba[2] = "Houston Rockets";
$query = "SELECT game_id
FROM table
WHERE date_int >= :date_int
AND (home_team = :team OR away_team = :team)
AND home_team IN(:list)
AND away_team IN(:list)
ORDER BY game_date_int ASC
LIMIT 1";
$stmt = $db->prepare($query);
$stmt->execute(array(':date_int' => $limit, ':team' => $team, ':list' => implode(',', $nba)));
Run Code Online (Sandbox Code Playgroud) 我有一个$_POST['excludeids']使用以下值调用的post变量:
1,2,3,4,5,6,7,8,9
Run Code Online (Sandbox Code Playgroud)
我想将此传递给SQL查询,NOT IN因此我使用以下查询:
$STH = $DBH->prepare("SELECT * FROM books WHERE id NOT IN (:excludeids)");
$STH->bindValue(':excludeids', $_POST['excludeids']);
$STH->execute();
Run Code Online (Sandbox Code Playgroud)
绑定变量在这种情况下不起作用我不知道为什么.上面的查询有什么问题?
我将尝试下面的查询,但不确定是否可以防止sql注入?
$status = [1, 2, 3];
$param = implode(', ', $status);
$rows = (new \yii\db\Query())
->select('*')
->from('user')
->leftJoin('post', "post.user_id = user.id AND post.some_column = $value AND post.status IN ($param)");
->all();
Run Code Online (Sandbox Code Playgroud)
返回预期结果,但可能会发生sql注入。我的 IN 状况如下
IN (1, 2, 3)
$rows = (new \yii\db\Query())
->select('*')
->from('user')
->leftJoin('post', "post.user_id = user.id AND post.some_column = :sid AND post.status IN (:param)", [':param' => $param, ':sid' => $value]);
->all();
Run Code Online (Sandbox Code Playgroud)
仅比较数组中的第一个元素,因为它看起来像这样,
IN ('1, 2, 3')它由单个字符串组成,不检查数组中的第二个元素,仅对第一个元素起作用。
我参考下面的链接,但不知道如何实现这个条件。
IN() Condition请给出join(PDO/Yii2/mysql)部分如何使用的解决方案On。
我使用的PDO,而我$_POST['arraywithdata']是提起阵列数字值.我认为这不够安全,我只是不确定并防止自己陷入黑客攻击.
这是我的代码:
$arr = $_POST['arraywithdata'];
$SQL->query("UPDATE `data_s` SET `set` = 1 WHERE `id` IN " . implode(", ", $arr));
Run Code Online (Sandbox Code Playgroud)
如您所见,我不会检查int中的邮政编码或其他内容.
我应该使用类似的东西:
implode(", ", (int) $arr)
Run Code Online (Sandbox Code Playgroud)
?
我猜上面的代码不起作用,因为数组不能是整数.
我有下一个SQL查询:
SELECT summary_table.device_id, WEEKDAY(summary_table.day) as day, AVG(summary_table.shows) as avg_shows
FROM (
SELECT device_id, day, sum(shows) as shows
FROM statistics
GROUP BY device_id, day
) as summary_table
WHERE device_id IN (1,2,3) // Just for example
GROUP BY device_id, WEEKDAY(day)
Run Code Online (Sandbox Code Playgroud)
我应该如何使用Laravel执行此操作?我把这个查询放在DB :: select函数中,但是如何将所有id放在"WHERE device_id IN(?)"条件下?我尝试使用"array(implode(',',$ var))"但它不起作用.如果我有像"13,14"那样的id,我只得到id = 13的结果.
所以问题是如何放置而不是"?" ids数组?
所以我希望能够从数组中获取值并在SQL查询中使用它,并从这些行中获取信息.我目前的代码是这样的:
$config['exclude_devices'] = array('1','5');
Run Code Online (Sandbox Code Playgroud)
$exclude = $config['exclude_devices'];
foreach ($exclude as $excluded) {
$deviceinformation = mysqli_query($db, "SELECT * FROM `devices` WHERE `device_id` NOT IN(" . $excluded . ")");
}
while ($row = mysqli_fetch_assoc($deviceinformation)) {
// do stuff here
// write to a variable for use in a table
}
Run Code Online (Sandbox Code Playgroud)
但是,这给出了设备1,2,3,4的输出.
如果我移动foreach包括while,它产生2,3,4,5,1,2,3,4:
$exclude = $config['exclude_devices'];
foreach ($exclude as $excluded) {
$deviceinformation = mysqli_query($db, "SELECT * FROM `devices` WHERE `device_id` NOT IN(" . $excluded . ")");
while ($row …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取一系列ID号并使用该ID号更新每一行.PHP PDO代码如下:
private function markAsDelivered($ids) {
$update = $this->dbh->prepare("
UPDATE notifications
SET notified = 1
WHERE notification_id IN (
:ids
)
");
$ids = join(',', $ids);
Logger::log("Marking the following as delivered: " . $ids, $this->dbh);
$update->bindParam(":ids", $ids, PDO::PARAM_STR);
$update->execute();
}
Run Code Online (Sandbox Code Playgroud)
但是,运行此选项时,虽然正在记录多个ID号,但只会更新列表中的第一个项目.如何修改此更新以更新多行?
列state属于table2以下varchars并由以下varchars组成:"AL","AK",..
在我的php代码中,我有以下字符串:$states="AL,AK,AZ,IL";
我试图在mySQL查询中以下列方式使用它:
$query = SELECT * FROM 'table2' WHERE 'state' IN('$states');
Run Code Online (Sandbox Code Playgroud)
它没有显示任何结果......这些撇号的正确语法是什么?
我有这样一个数组:
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches); // output is two number: 11, 12
Run Code Online (Sandbox Code Playgroud)
现在我想知道,如何将此数组传递$matches给此查询?
SELECT column_name(s)
FROM table_name
WHERE column_name IN ($matches); // actually I want something like this: IN (11, 12)
Run Code Online (Sandbox Code Playgroud)
有什么解决方案吗?