【问题标题】:Error: SQLSTATE[42000] When I try to update a value in a table [duplicate]错误:SQLSTATE [42000] 当我尝试更新表中的值时 [重复]
【发布时间】:2016-02-21 00:19:39
【问题描述】:

致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[42000]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 ''1235'='1235' 附近使用正确的语法 WHERE username='wafflezzz'' at line 1' in /home/wafflez3/public_html/Project SA 主题/ipn/set.php:14 堆栈 跟踪:#0 /home/wafflez3/public_html/Project SA 主题/ipn/set.php(14): PDOStatement->execute() #1 {main} 抛出 /home/wafflez3/public_html/Project SA Theme/ipn/set.php 在第 14 行

当我使用此代码将空值更改为值时出现该错误。

    <?php session_start(); require "../pdo_connect.php"; $usrname = $_SESSION["username"]; ?>
<title>Loading...</title>
<?php
$checker = $conn->prepare("SELECT * FROM transactions WHERE payer_user=:username AND success='1'");
$checker->bindParam(":username", $usrname);
$checker->execute();

while ($row = $checker->fetch(PDO::FETCH_BOTH)) {

   $paidscript = $row["item_name"];
   $sql = $conn->prepare("UPDATE us SET :script=:script WHERE username=:userr");
   $sql->bindParam(":userr", $usrname);
   $sql->bindParam(":script", $paidscript);
   $sql->execute();
    echo "You can now view the script!";




}

【问题讨论】:

  • 你确定不是$sql = $conn-&gt;prepare("UPDATE us SET script=:script WHERE username=:userr");
  • 这一行 $sql = $conn->prepare("UPDATE us SET :script=:script WHERE username=:userr");从脚本列名中删除“:”
  • 它的 :script 因为我想获取脚本名,如果你将脚本名设置为脚本名,那么我的系统就可以工作,那么你就有了脚本。我认为它很愚蠢,但这就是我所做的。脚本名也有一列
  • 简单:你不能这样做SET :script它被称为绑定列。
  • 你为什么不只是有一个名为scriptname的字段并在其中包含脚本名称?

标签: php mysql pdo


【解决方案1】:

$sql = $conn-&gt;prepare("UPDATE us SET :script=:script WHERE username=:userr");

应该是

$sql = $conn-&gt;prepare("UPDATE us SET script=:script WHERE username=:userr");

您根本不打算将字段名称绑定到参数。如果你这样做,它会给你一个这样的错误。

要拥有动态字段名称,您必须执行以下操作:

$paidscript = $row["item_name"];
$sql = $conn->prepare("UPDATE us SET {$paidscript}=:script WHERE username=:userr");

虽然如果字段来自用户输入的值,您实际上不应该动态输入字段。

【讨论】:

【解决方案2】:

这个

$sql = $conn->prepare("UPDATE us SET {$paidscript}=:script WHERE username=:userr");

而不是这个:

   $sql = $conn->prepare("UPDATE us SET :script=:script WHERE username=:userr");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2021-10-25
    • 2013-10-17
    相关资源
    最近更新 更多