致命错误:未捕获的 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 &lt;column name&gt; 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 语法有错误

致命错误:未捕获PDOException:SQLSTATE [HY093]:参数号无效:无参数

PDO:未捕获的 PDOException:找不到驱动程序