我有以下代码:
$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("ss", $table, $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = mysql_num_rows($data);
$rows = getRowsByArticleSearch($query, $table, $max);
$last = ceil($rowcount/$page_rows);
}
哪个应该工作正常。但是我收到以下错误:
您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以获取在’?附近使用的正确语法。第1行的较高(ARTICLE_NAME)喜欢’%?%’‘
如果我放
SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '% o %';
该查询工作正常。上面定义了$ table,并且从GET接收了查询,并且两者都是正确的有效值。为什么会失败?
编辑:更改为:
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
导致错误:
警告:mysqli_stmt :: bind_param()[mysqli-stmt.bind-param]:变量数与C:\ Program Files \
EasyPHP 3.0 \ www \ prog \ get_records.php中已准备好的语句中的参数数不匹配38
命令不同步;您现在不能运行此命令
然而
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", "%".$query."%");
结果是
致命错误:无法通过引用在第38行的C:\ Program Files \ EasyPHP 3.0 \ www \ prog \
get_records.php中传递参数2
最后
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ? ";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
将只给:
命令不同步;您现在不能运行此命令
是否可以将参数用于LIKE策略?
对于LIKE
子句,请使用以下命令:
SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ?, '%')
对于表名,将表名作为参数是一种极其糟糕的做法。
如果出于某些原因仍然需要执行此操作,则需要在准备查询之前将其嵌入查询文本中:
$countQuery = "SELECT ARTICLE_NO FROM $table_name WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ? ,'%')";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = mysql_num_rows($data);
$rows = getRowsByArticleSearch($query, $table, $max);
$last = ceil($rowcount/$page_rows);
}
我想要使用mysqli执行一个简单的准备好的语句,但它不会工作。 致命错误:未捕获异常“mysqli_sql_exception”,消息为“查询/准备好的语句中没有使用索引SELECT*FROM ACCOUNCT WHERE EMAIL=?和password=?‘mysqli_stmt->execute()#1{main}
使用Chris Brand的答案-它把我带到绑定参数并停在那里... 用阿卜杜拉的回答:
我们有一个db2 database V9.7FP1 出现此错误消息的可能原因是什么?
问题内容: 我只是想知道是否有一种方法可以在MySQL中使用某种形式的预处理语句,这样就不必逃避所有输入,也不必将所有文件从MySQL切换到MySQLi。我真的不相信转义功能,因此,如果在常规MySQL中有任何可行的替代方法,那就太好了。 问题答案: 使用PDO(PHP数据对象)连接到MySQL数据库。此方法将确保所有数据库输入将始终被视为文本字符串,并且您将不必进行任何手动转义。 结合正确使用h
我已经下载并安装了Codeception。我使用了以下说明:http://codeception.com/thanks 在编写和运行测试后,我得到以下错误: 我的单元测试如下: 当我的类没有扩展时,不会调用函数,断言函数也不会工作。 欢迎任何建议。
以下代码在准备时失败: 我发现:警告:mysqli::prepare()[mysqli.prepare]:无法获取mysqli。。。我在上面的代码中做错了什么?我检查了语法文档,但是如果我尝试将查询作为sql进行pas,我会得到一个语法错误。对于mysqli语法错误是否有一个好的调试工具?