致命错误:未捕获的 PDOException:SQLSTATE[42000]:? [复制]
Posted
技术标签:
【中文标题】致命错误:未捕获的 PDOException:SQLSTATE[42000]:? [复制]【英文标题】:Fatal error: Uncaught PDOException: SQLSTATE[42000]:? [duplicate] 【发布时间】:2019-12-17 23:57:23 【问题描述】:我正在尝试使用搜索构建无限滚动。到目前为止,我遇到了这个问题:
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DESC LIMIT 0, 4'.
谁能帮我解决这个问题?
if(isset($_GET["starts"], $_GET["limits"]))
$search = htmlspecialchars($_GET['Search'],ENT_QUOTES,'utf-8');
$start = htmlspecialchars($_GET['starts'],ENT_QUOTES, 'utf-8');
$limit = htmlspecialchars($_GET['limits'],ENT_QUOTES, 'utf-8');
$stmt = $conn->prepare("SELECT `jobtitle`, `company`, `location`,
`employment`, `email`, `Description` FROM `featured job` WHERE jobtitle LIKE
`:jobtitle` DESC LIMIT :starts, :limits");
$stmt->bindParam(":starts", intval(trim($start)), PDO::PARAM_INT );
$stmt->bindParam(":limits", intval(trim($limit)), PDO::PARAM_INT );
$stmt->bindParam(":jobtitle",$search);
$stmt->execute();
foreach ($posts as $data)
echo "<h2>".$data['jobtitle']."</h2>";
这是我的 ajax 代码
$(document).ready(function()
var limits = 4;
var starts = 0;
var action = 'inactive';
function load_job_data(limits, starts)
$.ajax(
url:"load_more.php",
method:"GET",
data:limits:limits, starts:starts,
cache:false,
success:function(data)
$('.results').append(data);
if(data == '')
$('#load_data_messages').text("Your potential jobs is loading");
$('#load_data_messages').css("color", "green");
action = 'active';
else
$('#load_data_messages').text("Out of jobs! please come back later!");
$('#load_data_messages').css("color","red");
action = "inactive";
);
if(action == 'inactive')
action = 'active';
load_job_data(limits, starts);
$(window).scroll(function()
if($(window).scrollTop() + $(window).height() > $(".load_data").height()
&& action == 'inactive')
action = 'active';
starts = starts + limits;
setTimeout(function()
load_job_data(limits, starts);
, 1000);
);
);
【问题讨论】:
哪里有方向没有意义。您是否缺少ORDER BY
子句?你也不应该需要 :jobtitle
周围的反引号。
@Jonnix 为什么我需要订单而不是地点
我希望你两个都想要,但我不知道。这不是一个或两个,你可以两者兼得。
我觉得你不确定htmlspecialchars
的目的是什么。只有在向 HTML 输出内容时才应该使用。在您的情况下,您使用进入数据库的整数,这是没有意义的。
【参考方案1】:
:jobtitle
不是列名,所以你不应该使用反引号,你会错过ORDER BY
子句
SELECT `jobtitle`
, `company`
, `location`
, `employment`
, `email`
, `Description`
FROM `featured job`
WHERE jobtitle LIKE :jobtitle
ORDER BY `jobtitle` DESC LIMIT :starts, :limits
并尝试将PARAM_STR
用于$search
;
$stmt->bindParam(":jobtitle",$search, PDO::PARAM_STR);
【讨论】:
答案已更新并提出建议【参考方案2】:我认为您应该删除 DESC
关键字。如果要对其进行排序,只需在limit
子句之前使用ORDER BY <column name> DESC
。
试试:
SELECT `jobtitle`, `company`, `location`, `employment`, `email`, `Description` FROM `featured job` WHERE jobtitle LIKE `:jobtitle` LIMIT :starts, :limits
【讨论】:
:jobtitle
呢?以上是关于致命错误:未捕获的 PDOException:SQLSTATE[42000]:? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO
致命错误:未捕获的 PDOException:SQLSTATE[42000] 语法错误或访问冲突
致命错误:第 19 行的 C:\xampp\htdocs\register.php 中抛出未捕获的异常“PDOException”
PHP 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误