相关疑难解决方法(0)

如何在PHP中阻止SQL注入?

如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)

这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)

可以采取哪些措施来防止这种情况发生?

php mysql sql security sql-injection

2776
推荐指数
28
解决办法
166万
查看次数

PHP - 将PDO与IN子句数组一起使用

我正在使用PDO执行一个带有IN子句的语句,该子句使用数组作为它的值:

$in_array = array(1, 2, 3);
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (".$in_values.")");
$my_result->execute();
$my_results = $my_result->fetchAll();
Run Code Online (Sandbox Code Playgroud)


上面的代码完全正常,但我的问题是为什么这不是:

 $in_array = array(1, 2, 3);
    $in_values = implode(',', $in_array);
    $my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)");
    $my_result->execute(array(':in_values' => $in_values));
    $my_results = $my_result->fetchAll();
Run Code Online (Sandbox Code Playgroud)

此代码将返回my_value等于$in_array(1)中第一项的项,但不返回数组中的其余项(2和3).

php mysql pdo prepared-statement in-clause

60
推荐指数
3
解决办法
5万
查看次数

如何连接多个条件,返回两个条件的所有组合

我愿意打赌,这是一个非常简单的答案,因为我是SQL的菜鸟.

表1列第1列(标准1)第2列(标准2)第3列(度量标准1)

表2列第1列(标准1)第2列(标准2)第3列(特定于table2.criteria2的度量标准2)

对于表中的每个标准1,可以存在1-5个值的标准2.

当我在这里使用join语句时(假设我在此之前将表1标识为One):

Select WeddingTable, TableSeat, TableSeatID, Name, Two.Meal
FROM table1 as One
inner join table2 as Two
on One.WeddingTable = Two.WeddingTable and One.TableSeat = Two.TableSeat
Run Code Online (Sandbox Code Playgroud)

我只得到其中一个标准1 /标准2组合,即使我知道有3个或4个事实.我如何获得所有组合?

在有婚礼的情况下,表1基本上是座位表,表2是每个桌子/座位选择的用餐选项.表1具有方便的TableSeatID,但表2没有可比较的ID.

样本数据:

在此输入图像描述

结果需要显示所有4条线,分别是WeddingTable 001的3个座位和WeddingTable 002的1个座位.

期望的结果:

在此输入图像描述

sql sql-server join

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

如何使用php数组与SQL运算符?

我有和两个值的数组,我想在选择查询中使用它与sql IN运算符.

这是我桌子的结构

id comp_id
1   2
2   3
3   1
Run Code Online (Sandbox Code Playgroud)

我有一个$arr有两个值的数组Array ( [0] => 1 [1] => 2 )

我想获取comp_id 1和comp_id 2的记录.所以我编写了以下查询.

SELECT * from table Where comp_id IN ($arr)
Run Code Online (Sandbox Code Playgroud)

但它不会返回结果.

php sql arrays in-operator

33
推荐指数
4
解决办法
8万
查看次数

一个准备好的语句,`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万
查看次数

其中id在数组中的Mysql

我有一串id,如1,2,3,4,5,我希望能够列出mysql中包含该列表ID的所有行.

我假设最简单的方法是将字符串转换为数组然后匹配($ array)但它对我不起作用 - 没有错误等但它不返回任何行:

$string="1,2,3,4,5";
$array=array_map('intval', explode(',', $string));
$query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."')");
Run Code Online (Sandbox Code Playgroud)

如果我执行$ array的var_dump,我得到:

array(5) { 
    [0]=> int(1) 
    [1]=> int(2) 
    [2]=> int(3) 
    [3]=> int(4) 
    [4]=> int(5) 
}
Run Code Online (Sandbox Code Playgroud)

知道我搞砸了吗?

php mysql arrays explode

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

mysql WHERE IN数组字符串/用户名

码:

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = join(', ',$friendsArray);  
$query120 = "SELECT picturemedium FROM users WHERE username IN ('$friendsArray2')";
echo $query120;
Run Code Online (Sandbox Code Playgroud)

这是输出:

SELECT picturemedium FROM users WHERE username IN ('zac1987, peter, micellelimmeizheng1152013142')
Run Code Online (Sandbox Code Playgroud)

它失败了,因为用户名没有被"zac1987","peter","mice ......"等单引号包裹.如何用单引号包装每个用户名?

php mysql arrays

11
推荐指数
4
解决办法
7万
查看次数

SQL Query中的数组?

我在WHERE子句中使用数组创建SQL查询时遇到问题.

例如:

我的阵列:

$myarray[1] = "hi";
$myarray[2] = "there";
$myarray[3] = "everybody";
Run Code Online (Sandbox Code Playgroud)

我的MySQL声明:

SELECT * FROM myTable WHERE title='".$myarray[]."'
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一点?我自己解决了这个问题:

for(...) {
$where = $where." title='".$myarray[$count]."' OR ";
}
$where = substr($where , 0, -3);
.....
SELECT * FROM myTable WHERE ".$where."
Run Code Online (Sandbox Code Playgroud)

但是如果我的数组中有数千个条目,那么SQL语句会变得太大而且很慢,对吧?

谢谢

php mysql

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

MySQL SELECT行匹配数组?

可能重复:
PHP/MYSQL在WHERE子句中使用数组

我有一个名为的数组$ids:

Array ( [0] => 14  [1] => 15 [2] => 16 [3] => 17 [4] => 18 [5] => 19)
Run Code Online (Sandbox Code Playgroud)

我想从表Users中选择ID匹配数组上任何值的表.如何才能做到这一点?

php mysql

8
推荐指数
1
解决办法
5684
查看次数

mysqli bind_param用于字符串数组

我不能让这个工作.我现在已经花了很多时间.

这有效:

$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno)
{
    return;
}
$query_str= "SELECT name FROM table WHERE city IN ('Nashville','Knoxville')";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{       
    $query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)

但是我不能让它与这样的bind_param一起工作:

$query_str= "SELECT name FROM table WHERE city IN (?)";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{       
    $cities= explode(",", $_GET['cities']);
    $str_get_cities=  "'".implode("','", $get_cities)."'"; // This equals 'Nashville','Knoxville'

    $query_prepared->bind_param("s", $cities);
    $query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我也试过call_user_func_array,但似乎无法使语法正确.任何帮助将不胜感激!

编辑:我已经严格尝试了moskito-x的建议和大量的例子列在这里以及其他在SO和随机网站上,没有任何作品.我认为问题可能是PHP 5.4,这就是我的MAMP现在设置的.

php mysqli bindparam

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