PHP UPDATE table 语句中的语法错误

PHP syntax error in UPDATE table statement

我正在尝试使用来自 sourcelocationtable (LocationID)、imagetable (ImageID),itemtypetable (ItemTypeID) 和 donatortable (DonatorID)。

我希望用户能够 select 下拉列表 select 框中的位置、图像、项目类型和捐赠者值,这些值将存储在一个变量中,然后是矿物table 将使用下拉 select 框中显示的值的外键编号进行更新。

后 4 tables 与矿物 table 的关系是 1-Many 因此我不能使用连接点 table 来保存他们必须去的外键在矿物 table 中。

尝试 运行 以下 sql 代码后

UPDATE mineraltable SET LocationID='160',ItemTypeID='1',ImageID='6',    DonatorID='4' WHERE ItemID='372' 

这是用我的 php 变量代替数值转换为 PHP 格式。

$sql = "UPDATE mineraltable\n"
    . "SET LocationID=\'$LocationID\', ItemTypeID=\'$ItemTypeID\', ImageID=\'$ImageID\', DonatorID=\'$DonatorID\'\n"
    . "WHERE ItemID=\'ItemID\'" 

我发现 sql 代码用数值 运行 成功写入我的本地服务器 xampp 并更新了 mineraltable 中的外键值,但是当我在我的网络浏览器中 运行 此代码的 php 版本时,我收到错误消息:

"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 '\'166\', ItemTypeID=\'6\', ImageID=\'11\', DonatorID=\'4\' WHERE ItemID=\'371\'' at line 2”

我在 Whosebug 上查看了另一种更新外键的方法,我发现您可以暂时删除外键以执行代码,然后重新应用外键。但不推荐这样做。

我已经多次检查代码,看不出任何错误。有人可以告诉我,因为我是 php 编码的新手,导致语法错误的地方是什么?非常感谢任何建设性的回答。

我已经按照How to update foreign key value in mysql database中的答案获取了更新语句代码。但也看了 [1]:Syntax error in update statement排查问题,但后面的例子link和我的不一样

这是整个输入表单的 php 代码。

   $debugMode = true;

   $dbhost = 'localhost';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'rockandmineraldb';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   echo 'Connected successfully';


   $sql = 'SELECT LocationID,Site,Region,Country,Continent FROM sourcelocationtable';
   mysql_select_db('rockandmineraldb');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

$SiteOptionData="";
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
         $LocationID = $row['LocationID']; 
         $Site = $row['Site'];
         $Region = $row['Region'];
         $Country = $row['Country'];
         $Continent = $row['Continent'];

       $SiteOptionData .= "<option value-\"$LocationID\">$Site $Region $Country $Continent</option>";

}




   $sql = 'SELECT DonatorID,DonatorFN,DonatorLN FROM donatortable';
   mysql_select_db('rockandmineraldb');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

$DonatorOptionData="";
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
         $DonatorID = $row['DonatorID']; 
         $DonatorFN = $row['DonatorFN'];
         $DonatorLN = $row['DonatorLN'];


       $DonatorOptionData .= "<option value-\"$DonatorID\">$DonatorFN $DonatorLN</option>";

}


   $sql = 'SELECT ItemTypeID,ItemType FROM itemtypetable';
   mysql_select_db('rockandmineraldb');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

$ItemTypeOptionData="";
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
         $ItemTypeID = $row['ItemTypeID']; 
         $ItemType = $row['ItemType'];



       $ItemTypeOptionData .= "<option value-\"$ItemTypeID\">$ItemType</option>";

}

   $sql = 'SELECT ImageID,Image FROM imagetable';
   mysql_select_db('rockandmineraldb');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

$ImageOptionData="";
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
         $ImageID = $row['ImageID']; 
         $Image = $row['Image'];

       $ImageOptionData .= "<option value-\"$ImageID\">$Image</option>";

}

 $sql = 'SELECT ItemID,TrayBoxNo,ItemInBox,Name FROM mineraltable';
   mysql_select_db('rockandmineraldb');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

$ItemOptionData="";
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
         $ItemID = $row['ItemID']; 
         $TrayBoxNo = $row['TrayBoxNo'];
         $ItemInBox = $row['ItemInBox'];
         $Name = $row['Name'];



       $ItemOptionData .= "<option value-\"$ItemID\">$TrayBoxNo,$ItemInBox,$Name</option>";

}
   mysql_free_result($retval);
   echo "Fetched data successfully\n";

if(isset($_POST['Item'])){ $ItemID== $_POST['Item']; } 
if(isset($_POST['Location'])){ $LocationID = $_POST['Location']; } 
if(isset($_POST['ItemType'])){ $ItemTypeID = $_POST['ItemType']; } 
if(isset($_POST['Image'])){ $ImageID = $_POST['Image']; } 
if(isset($_POST['Donator'])){ $DonatorID = $_POST['Donator']; } 


if(isset)

$sql = "UPDATE mineraltable\n"
    . "SET LocationID=\'$LocationID\', ItemTypeID=\'$ItemTypeID\', ImageID=\'$ImageID\', DonatorID=\'$DonatorID\'\n"
    . "WHERE ItemID=\'$ItemID\'";


            mysql_select_db('rockandmineraldb');
            $retval = mysql_query( $sql, $conn );

            if(! $retval ) {
               die('Could not update data: ' . mysql_error());
            }
            echo "Updated data successfully\n";

            mysql_close($conn);


?>



  <form method = "post" action = "<?php $_PHP_SELF ?>">
<table>
 <tr>
                    <td>Select Site</td>
                    <td>
                        <select size="10" name="Location" multiple="multiple" id="Location">


                            <?php echo $SiteOptionData; ?>

                        </select>
                    </td>
                </tr>

    <br>


                <tr>
    <td>Select Donator</td>
                    <td>
                        <select size="10" name="Donator" multiple="multiple" id="Donator">


                            <?php echo $DonatorOptionData; ?>

                        </select>
                    </td>
                </tr>

<br>

                <tr>
    <td>Select ItemType</td>
                    <td>
                        <select size="10" name="ItemType" multiple="multiple" id="ItemType">


                            <?php echo $ItemTypeOptionData; ?>

                        </select>
                    </td>
                </tr>

<br>

                <tr>
    <td>Select Image</td>
                    <td>


                        <select size="10" name="Image" multiple="multiple" id="Image">


                        <?php echo $ImageOptionData; ?> 

                        </select>
                    </td>
                </tr>

                <tr>

    <td>Select Item</td>
                    <td>
                        <select size="10" name="Item" multiple="multiple" id="Item">


                            <?php echo $ItemOptionData; ?>

                        </select>
                    </td>
                </tr>


</table>

  <input name="update" type="submit" id="update" value="update">

</form>

在您的查询中而不是

"UPDATE mineraltable\n"
    . "SET LocationID=\'$LocationID\', ItemTypeID=\'$ItemTypeID\', ImageID=\'$ImageID\', DonatorID=\'$DonatorID\'\n"
    . "WHERE ItemID=\'$ItemID\'"

使用

"UPDATE mineraltable "
    . "SET LocationID='$LocationID', ItemTypeID='$ItemTypeID', ImageID='$ImageID', DonatorID='$DonatorID' "
    . "WHERE ItemID='$ItemID'"

试试这个:

$sql = "UPDATE mineraltable"
. " SET LocationID='$LocationID', ItemTypeID='$ItemTypeID', ImageID='$ImageID', DonatorID='$DonatorID'"
. " WHERE ItemID='$ItemID'" 

你使用了double-quote所以你不应该转义single-quote。

 $sql = "UPDATE mineraltable
        SET LocationID='$LocationID', ItemTypeID='$ItemTypeID', ImageID='$ImageID', 
     DonatorID='$DonatorID' WHERE ItemID='ItemID' ";

请从查询中删除 \nbackslash。不需要。