当前位置: 首页 > 知识库问答 >
问题:

php准备语句SQLSTATE[42000]:语法错误或访问冲突:1064

林德惠
2023-03-14
$street = 'astreet';
$lname = 'alname';
$fname = 'afname';
$list = '1,2,3,4,5';

   $var = 'admin';  

   $db = new PDO("mysql:dbname=customers;host=localhost",$var,$var);

   $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

$sql = "SELECT * FROM `table` WHERE `id` in ($list) AND `first_name` LIKE :fname AND `last_name` LIKE :lname AND `street_name` LIKE :street";

   $stmt = $db->prepare($sql);

   $stmt->execute(array(':street' => $street));
   $stmt->execute(array(':fname' => $fname));
   $stmt->execute(array(':lname' => $lname));

   $result = $db->query($sql);



foreach ($result as $row) {

        echo $row['post_code'];

              }

是否有代码缺失/不正确?

谢谢

共有1个答案

冀鸿才
2023-03-14
$stmt = $db->prepare($sql);

$stmt->execute(array(':street' => $street));
$stmt->execute(array(':fname' => $fname));
$stmt->execute(array(':lname' => $lname));

您将运行同一个查询三次,每次都使用不同的参数。您需要按照以下方式运行查询:

$stmt = $db->prepare($sql);

$stmt->execute(array(':street' => $street, ':fname' => $fname, ':lname' => $lname));

并一次性传递所有三个参数。

编辑添加

$stmt = $db->prepare($sql);

$stmt->bindParam(':street', $street);
$stmt->bindParam(':fname', $fname);
$stmt->bindParam(':lname', $lname);

$stmt->execute();
$sql = "SELECT * FROM `table` WHERE `id` in ($list) AND `first_name` LIKE ? AND `last_name` LIKE ? AND `street_name` LIKE ?";
$stmt = $db->prepare($sql);

$stmt->execute(array($fname, $lname, $street));
 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 由于在MySQL中使用保留字作为表或列名而导致的语法错误 (1个答案) 3年前关闭。 我已经浏览了所有其他StackOverflow(和Google)中相同问题的帖子,但似乎都没有解决我的问题。 我正在使用PDO和PHP。 我的代码: 而第一个print_r给 这是预期的(没有一个为空) 但它输出错误 SQLSTATE [42000]:语法错误或访问冲突

  • 问题内容: 我想在同一查询中使用WhereIn和Groupby来获取结果。 我已经试过了: 但是我得到了这个错误信息: SQLSTATE [42000]:语法错误或访问冲突:1055’sbrtpt.loading.id’不在GROUP BY中(SQL:从中选择从(14,15,16)组中的id按Vehicle_no进行加载) 问题答案: 简短答案 在-> 数组中 设置为全部禁用。 .... 要么 您

  • 在cmd中提交“php artisan migrate:fresh”后出现错误。 SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节(SQL:alter tableaddunique()

  • 问题内容: 嗨,我正在尝试学习使用准备好的语句来避免SQL注入等的正确方法。 当我执行脚本时,我从脚本中收到一条消息,提示已插入0行,我希望这表示已插入1行,并且当然会更新表。我不完全确定自己准备好的陈述,因为我已经做过一些研究,我的意思是每个例子都各不相同。 更新表格时,我需要声明所有字段吗?还是只更新一个字段就可以了? 任何信息将非常有帮助。 index.php classes / class

  • 问题内容: 我使用准备好的语句编写了select语句。每次尝试运行它都会出现此错误。我如何克服这个错误?我的jdbc连接器是mysql-connector- java-5.1.13-bin.jar。我的代码: 错误代码.. 2013年10月1日,下午1:23:23 sanin.lands.model.View_ads_cls getAdDetail 问题答案: 错误在这一行 这样做

  • 问题内容: 今天有人告诉我,我确实应该在应用程序中使用PDO和准备好的语句。在我了解好处的同时,我也在努力了解如何将其实现到我的工作流程中。除了它使代码更简洁外,我是否应该有一个特定的数据库类来容纳所有准备好的语句,还是应该在每次运行查询时都创建一个?我发现很难理解何时应使用标准PDO查询以及何时应使用准备好的语句。任何示例,技巧或教程链接将不胜感激。 问题答案: pdo :: prepare()