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' ";
请从查询中删除 \n
和 backslash
。不需要。
我正在尝试使用来自 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' ";
请从查询中删除 \n
和 backslash
。不需要。