我在PDO中实现LIKE时遇到问题
我有这个问题:
$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'";
$params = array($var1, $var2);
$stmt = $handle->prepare($query);
$stmt->execute($params);
Run Code Online (Sandbox Code Playgroud)
我检查了它们$var1,$var2它们包含了我想要搜索的单词,我的PDO工作正常,因为我的一些查询SELECT INSERT工作,这只是我LIKE在PDO中不熟悉的.
结果是没有返回.我$query的语法是否正确?
psycopg2是否有一个函数来转义Postgres 的LIKE操作数的值?
例如,我可能想要匹配以字符串"20%of all"开头的字符串,所以我想写这样的东西:
sql = '... WHERE ... LIKE %(myvalue)s'
cursor.fetchall(sql, { 'myvalue': escape_sql_like('20% of all') + '%' }
Run Code Online (Sandbox Code Playgroud)
我可以在这里插入一个现有的escape_sql_like函数吗?
(类似的问题如何显式引用字符串值(Python DB API/Psycopg2),但我找不到答案.)
我已经阅读了关于如何编写这些查询的多个示例,但我正在努力使这个特定的类似于在使用时运行 bindParam
这是匹配以a开头的用户名的正确方法吗?
$term = "a";
$term = "'$term%'";
$sql = "SELECT username
FROM `user`
WHERE username LIKE :term
LIMIT 10";
$core = Connect::getInstance();
$stmt = $core->dbh->prepare($sql);
$stmt->bindParam(':term', $term, PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud) 我有这样的SQL查询:
SELECT * FROM tbl_name WHERE title Like "%:needle%"
Run Code Online (Sandbox Code Playgroud)
当我使用此语句手动查询MySQL数据库时,它可以工作.但是当我使用它与PDO并使用相同的值时:我手动查询的针它只返回一个空的结果集.
utf8编码会影响它的行为吗?
任何人都知道如何将PHP预处理语句与LIKE结合起来?即
"SELECT * FROM table WHERE name LIKE %?%";
我是PHP的新手,我正在尝试学习使用PDO连接到测试MySQL数据库.我有以下内容:
try {
$db = new PDO('mysql:dbname=MYDBNAME;host=MYHOST', 'USERNAME', 'PASSWORD');
$query = "select * from books where ? like '%?%'";
$stmt = $db->prepare($query);
$stmt->execute(array($searchtype, $searchterm));
} catch(PDOException $e) {
echo 'PDOException: ' . $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试它时,我收到以下警告:警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:无效的参数号:绑定变量的数量与令牌的数量不匹配
当我删除like子句和$ searchterm参数时,它会正确返回结果.我想 - 比如'%?%' - 可能不是用双引号创建这个查询的合法方式,所以我尝试转义',这不起作用.我四处寻找解决方案,发现有人将'%和%'移到$ searchterm所在的位置:
$query = "select * from books where ? like ?";
...
$stmt->execute(array($searchtype, '\'%'.$searchterm.'%\''));
Run Code Online (Sandbox Code Playgroud)
我得到了相同的结果.
任何帮助表示赞赏.谢谢!
/ UPDATE **** /我在http://us3.php.net/manual/en/pdo.prepared-statements.php的例子12中找到了
Example#12使用占位符无效
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name'])); …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)
对我而言,这更像是一种黑客攻击,是否有更正式的方式来做到这一点?
我在, inCONCAT()上使用时遇到问题。WHEREPDO
编码:
<?php
require_once('config.php');
$fdate = '01/01/2010';
$tdate = '31/12/2030';
$identification = '';
$count = "SELECT count(*) as total FROM ( select time_id from doc_sent WHERE date >= :fdate AND date <= :tdate AND identification LIKE concat('%',:identification,'%') ) x;";
//$count = "SELECT count(*) as total FROM ( select time_id from doc_sent WHERE date >= :fdate AND date <= :tdate ) x;";
$stmt_count_row_main_table = $pdo->prepare($count);
$stmt_count_row_main_table->execute(['fdate' => $fdate, 'tdate' => $tdate, 'identification' => $identification]);
//$stmt_count_row_main_table->execute(['fdate' => …Run Code Online (Sandbox Code Playgroud) 希望有人能帮助我了解当变量值旁边需要多字符通配符时如何在 mysqli 中绑定参数。我发现它在创建 SQL 语句时对我有用,如下所示:
$sql = "SELECT item_title FROM item WHERE item_title LIKE '%$title%'";
Run Code Online (Sandbox Code Playgroud)
但是,我尝试按照相同的模式绑定变量,发现它失败了。他们使用了这个代码:
$sql = "SELECT item_title FROM item WHERE item_title LIKE '%?%'";
Run Code Online (Sandbox Code Playgroud)
它引发了这个错误:
警告: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: 变量数与 program_name 在线准备语句中的参数数不匹配......
谁能告诉我如何解决这个问题?谢谢你。
是否有任何转换方式
$term = $_GET['p'];
$stmt = $dbh->prepare("
SELECT *
FROM posts
WHERE heading LIKE '%$term%'
OR full_text LIKE '%$term%'
LIMIT 0 , 30
");
$stmt->execute();
$answer = $stmt->fetch(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
INTO之类的东西
$term = "'%" . $_GET['p'] . "%'";
$stmt = $dbh->prepare("
SELECT *
FROM posts
WHERE heading LIKE :term
OR full_text LIKE :term
LIMIT 0 , 30
");
$stmt->bindParam(":term", $term);
$stmt->execute();
$answer = $stmt->fetch(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
这样我可以使用bindParam(":term", $term);而不是'%$term%'在查询中?
我已经在bindParam中查看了这些使用LIKE的MySQL PDO查询和 使用bindParam的Mysql,PDO-Like语句.但他们没有给我任何正确的答案.
我正在尝试为我的网站制作一个搜索引擎,而现在我只是想确保连接完全正常.这是我到目前为止的代码:
编辑代码(仍然不起作用,但到目前为止我在这里的建议):
$db = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS);
$stmt = $db->prepare("SELECT * FROM table_1 WHERE name LIKE ? ORDER BY bid DESC");
$stmt->bindParam(1, "%{$_GET['s']}%", PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)
我试着看看不同的方法是否execute可以做任何事情,但无论上面哪种方式我写它,我都得到相同的结果,没有.我想%在那里使用通配符,所以它会在任何地方进行搜索name.在那个笔记上,我正确使用它吗?大多数混淆我的事情是,当我在完全相同的查询到的phpMyAdmin输入,查询经过精细跑,所以我的猜测是,我在什么地方搞砸了的PDO.
编辑:PHPMyAdmin查询:
SELECT*FROM table_1 WHERE name LIKE'%Test%'ORDER BY bid DESC LIMIT 0,30
这将返回1个结果,如预期的那样.我的代码和这个查询有什么不同?:/
是否可以在 LIKE 语句中与“%”结合使用 MSSQL 中的预准备语句(而非 PDO)占位符?
我对代码进行了一些操作,最终得到以下结果:
哪里列喜欢?%
并且参数是“test1_”,所以我想获取“test1_%”的所有结果
但这不起作用