相关疑难解决方法(0)

PHP内爆不适用于大阵列?

我有一个包含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,所有这些测试都失败了.

php arrays limit implode

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

转义IN语句PDO MYSQL的字符串数组

我没有运行循环来更新表中的值,而是想使用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()条件吗?因为我希望绑定一个字符串数组而不是整数.

php mysql pdo

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

将数组的所有索引放在逗号分隔的字符串中

我有一个看起来像这样的数组:

array('first' => 'value1', 'second' => 'value2', ...);
Run Code Online (Sandbox Code Playgroud)

如何获取所有密钥并将它们放在逗号分隔的字符串中?

在最后我需要这样的东西来做一个查询:

values IN ('first','second',...)
Run Code Online (Sandbox Code Playgroud)

谢谢

php arrays implode

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

mySQL bind_param与IN(?)

使用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)

php mysqli

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

带有IN子句的MySQL PDO

我正在将我的所有查询切换为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)

php mysql pdo

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

PHP PDO for MYSQL中的NOT IN查询

我有一个$_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)

绑定变量在这种情况下不起作用我不知道为什么.上面的查询有什么问题?

php mysql sql pdo

4
推荐指数
1
解决办法
4750
查看次数

Yii2:我可以将数组绑定到 join 中的 IN() 条件吗?

我将尝试下面的查询,但不确定是否可以防止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() 条件吗?

IN() Condition请给出join(PDO/Yii2/mysql)部分如何使用的解决方案On

php mysql sql-injection yii2

4
推荐指数
1
解决办法
3813
查看次数

使用内爆与数组进行安全查询

我使用的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)

我猜上面的代码不起作用,因为数组不能是整数.

php arrays security pdo

3
推荐指数
1
解决办法
4053
查看次数

Laravel 4在DB :: select查询条件下

我有下一个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数组?

php laravel

3
推荐指数
1
解决办法
8600
查看次数

如何针对数组运行foreach并将其包含在SQL查询中?

所以我希望能够从数组中获取值并在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)

php mysql

3
推荐指数
1
解决办法
98
查看次数

PHP PDO:更新SQL WHERE IN()子句中的数组

我正在尝试获取一系列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号,但只会更新列表中的第一个项目.如何修改此更新以更新多行?

php sql arrays pdo where-clause

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

如何在php中使用mysql IN()函数?

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)

它没有显示任何结果......这些撇号的正确语法是什么?

php mysql sql

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

如何将数组传递给IN()子句?

我有这样一个数组:

$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)

有什么解决方案吗?

php mysql arrays

-1
推荐指数
1
解决办法
45
查看次数

标签 统计

php ×13

mysql ×7

arrays ×5

pdo ×5

sql ×3

implode ×2

laravel ×1

limit ×1

mysqli ×1

security ×1

sql-injection ×1

where-clause ×1

yii2 ×1