使用String作为数组并在查询中使用它

时间:2018-09-07 07:47:57

标签: php

我正在处理一个PHP文件,并通过POST获得此字符串:

$temas = $_POST['temas']; //$temas = ".45.12.34"

每个数字都应该是表记录的ID。

我有以下查询

$query = "SELECT * FROM tb_preguntas WHERE tema = '".$temas."'";

我需要在查询的WHERE部分中放置每个收到的ID

类似的东西:...在什么地方,特马= 45或特马= 12或特马= 34

当然,每次执行时,字符串都会改变。

我尝试使用PHP explode函数,但是我不知道如何在查询中实现结果。

5 个答案:

答案 0 :(得分:4)

我的答案与其他人的答案没有太大不同,但这是解决SQL注入+解决方案的答案

$temas = implode(',', explode('.', $_POST['temas']));
$temas = trim($temas);

$res = $conn->prepare('select * from `tb_preguntas` WHERE `tema` in (:temas)');
$res->execute(array(':temas' => $temas));

这里我们使用一条准备好的语句,现在您的代码是安全的了!

答案 1 :(得分:1)

最佳案例方案

$temas = implode(',', explode( '.', $_POST['temas']));
$query = "select * from tb_preguntas WHERE tema in (" . $temas . ")";

但您的情况是。首先出现会使生活变得更加艰难,所以会有更好的解决方案

$temas1 = explode( '.', $_POST['temas'] );
$temas2 = array();
foreach( $temas1 as $value ) {
   if( is_numeric( $value )) $temas2[] = $value;
}
$query = "select * from tb_preguntas WHERE tema in (" . implode( ',' , $temas2 ) . ")";

答案 2 :(得分:1)

如上所述,您可以使用mysql的IN()函数,但是必须删除第一个句点“。”。并将其余的改为逗号“,”。

library(tidyverse)
set.seed(1234)

df <- replicate(10, rnorm(10)) %>% as_data_frame() %>% gather()
df_means <- df %>% group_by(key) %>% summarise(value=mean(value))

ggplot(data = df) + 
   aes(x = key, y = value) +
   geom_point() + 
   geom_point(data=df_means, col="red")

答案 3 :(得分:1)

使用explode()将这些数字除以.,它必须变成数组。

然后使用数组的整个长度将查询运行到循环中:

$id = explode('.',$temas);
    foreach($id as $temas_id) {    
      $query = "SELECT * FROM tb_preguntas WHERE tema = '".$temas_id."'";
      if(isset($conn->query(query ))) {
        // Execute code here if there's a result.
      }
    }

答案 4 :(得分:0)

请尝试使用此代码。

$temas = $_POST['temas']; 

$temas = explode('.',$temas);

$query = mysql_query("SELECT * FROM test_stipe WHERE tema in '".implode("', '", $temas)."'");

此代码运行正常。