相关疑难解决方法(0)

参数化SQL IN子句

如何参数化包含IN具有可变数量参数的子句的查询,比如这个?

SELECT * FROM Tags 
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)

在此查询中,参数的数量可以是1到5之间的任何值.

我不希望为此(或XML)使用专用存储过程,但如果有一些特定于SQL Server 2008的优雅方式,我对此持开放态度.

sql sql-server parameters

1020
推荐指数
29
解决办法
33万
查看次数

在python MySQLDB IN子句中使用列表

我知道如何将列表映射到字符串:

foostring = ",".join( map(str, list_of_ids) )
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容将该字符串转换为IN子句:

cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))
Run Code Online (Sandbox Code Playgroud)

我需要的是使用MySQLDB安全地完成同样的事情(避免SQL注入).在上面的示例中,因为foostring不作为参数传递来执行,所以它很容易受到攻击.我还必须在mysql库之外引用并转义.

(有一个相关的SO问题,但那里列出的答案要么对MySQLDB不起作用,要么易受SQL注入攻击.)

python mysql

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

SQL Server过程声明一个列表

我的SQL代码非常简单.我正在尝试从数据库中选择一些数据,如下所示:

SELECT * FROM DBTable
WHERE id IN (1,2,5,7,10)
Run Code Online (Sandbox Code Playgroud)

我想知道如何在select之前声明列表(在变量,列表,数组或其他内容中),而select中只使用变量名,如下所示:

VAR myList = "(1,2,5,7,10)"
SELECT * FROM DBTable
WHERE id IN myList
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008-r2

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

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

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

如何在PHP中使用IN子句的查询中使用预准备语句

我需要做一个简单的查询

$array_of_ids = array();
//poulate $array_of_ids, they don't come from another db but from Facebook
//so i can't use a subquery for the IN clause
$wpdb->prepare("SELECT id from table where id IN (%d, %d)", $array_of_ids [0], $array_of_ids [1]);
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在数组中有200个元素,处理这个问题的正确方法是什么?我必须用200手动构建查询%d吗?我需要这个查询,因为我必须与facebook数据"同步"我的数据库,我必须检查我在数据库中的用户是否存在,更新那些存在的,插入新用户并删除那些不是我的朋友.

php mysql prepared-statement

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

使用一个查询更新多行

如何一次更新数百行?

喜欢: UPDATE table SET a = ? WHERE b = ? AND c = 1

但对于许多行.该?参数是数组...

我读了这个答案,但它使用CASE而我认为我不能这样做......


现在我有这样的事情:

foreach($values as $key => $value)
  $res = $pdo->prepare('UPDATE table SET a = ? WHERE b = ? AND c = 1');
  $res->execute(array($value, $key));
}
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

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

将 Javascript 数组转换为 MySQL 数组

我想将 javascript 数组 ids = [ 378, 464 ] 转换为 MySQL 成功解析的数组。

我的 SQL 查询包括这样的数组:

Do something WHERE id IN ("472", "467"). 
Run Code Online (Sandbox Code Playgroud)

此查询适用于 MySQL Workbench。

我正在努力获得所需结构的数组。我在我的 api 中尝试了以下 javascript 结构,但我无法让它工作。

("378", "464")
[ 378, 464 ]
('472', '467')
Run Code Online (Sandbox Code Playgroud)

MYSQL 错误信息:

  code: 'ER_PARSE_ERROR',
  errno: 1064,
Run Code Online (Sandbox Code Playgroud)

javascript mysql arrays api

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

SQL注入——将数据插入表中

因此,我尝试在本地托管的网页上练习 SQL 注入。我对 SQL 很陌生,尤其是 SQL 注入。我已经做了一些研究,将新条目注入表中,但是当我尝试执行时,它似乎不起作用。

首先,我的网页是登录的。我有用户名和密码(显然)并且可以在不附加任何 SQL 注入的情况下登录。但是当我将注入代码添加到用户名框中时,它不起作用。例子:

    username: admin'; insert into hall values (3,'https://google.com','Google'); --
    password: 123321
Run Code Online (Sandbox Code Playgroud)

在我的大厅表中,有 3 个条目:id、链接、目的地。ID 是一个整数,链接和目标是 varchars。

我需要做什么才能成功注入并将此条目添加到数据库中?是需要输入正确的用户名和密码,还是只输入用户名,还是其他什么?

php mysql sql sql-injection

0
推荐指数
1
解决办法
7034
查看次数