这是我的尝试:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Run Code Online (Sandbox Code Playgroud) 出于某些原因,我想明确引用字符串值(成为构造的SQL查询的一部分),而不是等待cursor.execute方法对其第二个参数的内容执行的隐式引用.
通过"隐含引用"我的意思是:
value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;"
cursor.execute( query, (value,) ) # value will be correctly quoted
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样的东西:
value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;" % \
READY_TO_USE_QUOTING_FUNCTION(value)
cursor.execute( query ) # value will be correctly quoted, too
Run Code Online (Sandbox Code Playgroud)
这是READY_TO_USE_QUOTING_FUNCTIONPython DB API规范所期望的低级别(我在PEP 249文档中找不到这样的功能).如果没有,也许Psycopg2提供这样的功能?如果没有,也许Django提供这样的功能?我不想自己写这样的功能......
如何在node-mysql中转义MySQL LIKE语句?
有点像
"SELECT * FROM card WHERE name LIKE '%" + connection.escape(req.body.search) + "%'"
Run Code Online (Sandbox Code Playgroud)
结果是
'SELECT * FROM card WHERE name LIKE \'%\'hello\'%\''
Run Code Online (Sandbox Code Playgroud)
这是语法错误.如果我使用替代语法
connection.query("SELECT * FROM card WHERE name LIKE '%?%'", req.body.search, function () {});
Run Code Online (Sandbox Code Playgroud)
导致类似的语法错误.我也试过了
connection.query("SELECT * FROM card WHERE name LIKE ?", '%' + req.body.search + '%', function () {});
Run Code Online (Sandbox Code Playgroud)
这最终会逃脱'%'的标志.
为了使用PDO进行LIKE搜索,我需要%在传递参数之前将其添加到参数中.
这有效:
$qry = '
SELECT product_id
FROM cart_product
WHERE product_manufacturer_num LIKE :search_string
';
$sth = $this->pdo->prepare($qry);
$sth->execute( array("search_string"=>'%'.$search_string.'%') );
Run Code Online (Sandbox Code Playgroud)
对我而言,这更像是一种黑客攻击,是否有更正式的方式来做到这一点?
我有一个Python脚本,通过SQLAlchemy的connection.execute函数运行pgSQL文件.这是Python中的代码块:
results = pg_conn.execute(sql_cmd, beg_date = datetime.date(2015,4,1), end_date = datetime.date(2015,4,30))
Run Code Online (Sandbox Code Playgroud)
这是变量在我的SQL中输入的区域之一:
WHERE
( dv.date >= %(beg_date)s AND
dv.date <= %(end_date)s)
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到一个神秘的python错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) argument formats can't be mixed
Run Code Online (Sandbox Code Playgroud)
...然后是有问题的SQL查询的大量转储.我以前使用相同的变量约定运行这个确切的代码.这次为什么不工作?
pdo ×2
php ×2
psycopg2 ×2
python ×2
sql ×2
django ×1
javascript ×1
mysql ×1
node-mysql ×1
node.js ×1
postgresql ×1
sqlalchemy ×1