UPDATE table语句中的PHP语法错误

UPDATE table语句中的PHP语法错误,php,mysql,database,syntax-error,Php,Mysql,Database,Syntax Error,我试图用sourcelocationtable(LocationID)、imagetable(ImageID)、itemtypetable(ItemTypeID)和donatortable(DonatorID)中的外键值更新名为mineraltable的表(主键名为ItemID) 我希望用户能够从下拉选择框中选择位置、图像、项目类型和捐赠者值。该值将存储在变量中,然后使用下拉选择框中显示的值的外键号更新该表 后4个表与mineral表的关系是1-Many,因此我不能使用连接表来保存它们必须放在m

我试图用sourcelocationtable(LocationID)、imagetable(ImageID)、itemtypetable(ItemTypeID)和donatortable(DonatorID)中的外键值更新名为mineraltable的表(主键名为ItemID)

我希望用户能够从下拉选择框中选择位置、图像、项目类型和捐赠者值。该值将存储在变量中,然后使用下拉选择框中显示的值的外键号更新该表

后4个表与mineral表的关系是1-Many,因此我不能使用连接表来保存它们必须放在mineral表中的外键

在尝试运行以下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\'" 
我发现使用数值写入本地服务器xampp的sql代码运行成功,并更新了表中的外键值,但当我在web浏览器中运行此代码的php版本时,出现错误:

“您的SQL语法有错误;请检查以下手册: 对应于要使用的正确语法的MariaDB服务器版本 在“\'166\”附近,ItemTypeID=\'6\”,ImageID=\'11\,DonatorID=\'4\,其中 第2行的ItemID=\'371\'”

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

我已经对代码进行了多次检查,没有发现任何错误。有人能告诉我,因为我是php编码新手,语法错误是由哪里造成的吗?非常感谢任何有建设性的回答。

我已经按照答案获取了更新语句代码。但是也查看了 [1] :解决问题,但后一链接中的示例与我的示例不同

下面是整个输入表单的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>
$debugMode=true;
$dbhost='localhost';
$dbuser='root';
$dbpass='';
$dbname='rockandmineraldb';
$conn=mysql\u connect($dbhost、$dbuser、$dbpass、$dbname);
如果(!$conn){
die('无法连接:'.mysql_error());
}
echo“连接成功”;
$sql='从sourcelocationtable中选择LocationID、站点、地区、国家/地区、大陆';
mysql_select_db(“rockandmineraldb”);
$retval=mysql\u查询($sql,$conn);
如果(!$retval){
die('无法获取数据:'.mysql_error());
}
$SiteOptionData=“”;
而($row=mysql\u fetch\u数组($retval,mysql\u ASSOC)){
$LocationID=$row['LocationID'];
$Site=$row['Site'];
$Region=$row['Region'];
$Country=$row['Country'];
$Continental=$row['Continental'];
$SiteOptionData.=“$Site$地区$Country$大陆”;
}
$sql='从donatortable中选择DonatorID、DonatorFN、DonatorLN';
mysql_select_db(“rockandmineraldb”);
$retval=mysql\u查询($sql,$conn);
如果(!$retval){
die('无法获取数据:'.mysql_error());
}
$DonatorOptionData=“”;
而($row=mysql\u fetch\u数组($retval,mysql\u ASSOC)){
$DonatorID=$row['DonatorID'];
$DonatorFN=$row['DonatorFN'];
$DonatorLN=$row['DonatorLN'];
$DonatorOptionData.=“$DonatorFN$DonatorLN”;
}
$sql='从itemtypetable中选择ItemTypeID、ItemType';
mysql_select_db(“rockandmineraldb”);
$retval=mysql\u查询($sql,$conn);
如果(!$retval){
die('无法获取数据:'.mysql_error());
}
$ItemTypeOptionData=“”;
而($row=mysql\u fetch\u数组($retval,mysql\u ASSOC)){
$ItemTypeID=$row['ItemTypeID'];
$ItemType=$row['ItemType'];
$ItemTypeOptionData.=“$ItemType”;
}
$sql='选择ImageID,imagetable中的图像';
mysql_select_db(“rockandmineraldb”);
$retval=mysql\u查询($sql,$conn);
如果(!$retval){
die('无法获取数据:'.mysql_error());
}
$ImageOptionData=“”;
而($row=mysql\u fetch\u数组($retval,mysql\u ASSOC)){
$ImageID=$row['ImageID'];
$Image=$row['Image'];
$ImageOptionData.=“$Image”;
}
$sql='selectitemid,TrayBoxNo,ItemInBox,Name fromtable';
mysql_select_db(“rockandmineraldb”);
$retval=mysql\u查询($sql,$conn);
如果(!$retval){
die('无法获取数据:'.mysql_error());
}
$ItemOptionData=“”;
而($row=mysql\u fetch\u数组($retval,mysql\u ASSOC)){
$ItemID=$row['ItemID'];
$TrayBoxNo=$row['TrayBoxNo'];
$ItemInBox=$row['ItemInBox'];
$Name=$row['Name'];
$ItemOptionData.=“$TrayBoxNo、$ItemInBox、$Name”;
}
mysql_free_结果($retval);
echo“已成功获取数据\n”;
如果(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'];}
如果(isset($_POST['Donator']){$DonatorID=$_POST['Donator'];}
如果(isset)
$sql=“更新数据表\n”
“SET-LocationID=\'$LocationID\'、ItemTypeID=\'$ItemTypeID\'、ImageID=\'$ImageID\'、DonatorID=\'$DonatorID\'\n”
“其中ItemID=\'$ItemID\'”;
mysql_select_db(“rockandmineraldb”);
$retval=mysql\u查询($sql,$conn);
如果(!$retval){
die('无法更新数据:'.mysql_error());
}
echo“已成功更新数据\n”;
mysql_close($conn);
?>

在您的查询中,而不是

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

试试这个:

$sql = "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' ";

请从查询中删除
\n
反斜杠
。这不是必需的。

尝试从您输入$sql的查询中删除换行符。\n您不必在
中转义
'
 $sql = "UPDATE mineraltable
        SET LocationID='$LocationID', ItemTypeID='$ItemTypeID', ImageID='$ImageID', 
     DonatorID='$DonatorID' WHERE ItemID='ItemID' ";