我正在尝试根据唯一ID($ id)删除数据库中的记录。这段代码有问题吗?可能是一个简单的为你的PHP专业人士。
function delAccount(){
mysql_query("DELETE FROM accounts WHERE id=".$id."LIMIT 1");
}
我得到了:
Fatal error: Can't use function return value in write context in
/home/content/53/7311353/html/cca/accounts/include/processAct.php on line 15
我的班级,我掌握了一切:
class Accounts
{
function Accounts(){
if (isset($_POST['addacct'])){
$this->addAccount();
}elseif(isset($_POST['editacct'])){
$this->editAccount();
}elseif(isset($_POST['delacct'])){
$this->delAccount();
}else{
// redirect if loaded without a POST value set
header("Location: ../index.php?o=illegal&t=nodata");
}
}
答案 0 :(得分:2)
首先,您应该在“。$ id”之间加一个空格。和LIMIT所以:
mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1");
其次,默认情况下,$ id在此函数中不可用。要么这样做:
function delAccount($id) {
mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1");
}
并使用delAccount($ id_parameter);在您的脚本中发送ID以及该功能。或试试这个:
function delAccount() {
global $id;
mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1");
}
然后,您可以在代码中的其他位置设置$id
的值后调用此函数。
答案 1 :(得分:1)
你确定设置了$ id吗?
如果$ id应作为参数发送给函数,请尝试:
function delAccount($id) {
mysql_query("DELETE FROM accounts WHERE id=" . $id . " LIMIT 1");
}
编辑:您错过了ID和LIMIT之间的空格字符。
对查询字符串的形式添加了一些小改进:
function delAccount($id) {
mysql_query("DELETE FROM `accounts` WHERE `id` = " . $id . " LIMIT 1");
}
编辑:
你得到的错误并非来自MySQL本身。你检查了返回的值吗?它可能会返回另一个错误,或者返回的值可能是正确的,但在以后的代码中以错误的方式使用。
答案 2 :(得分:1)
有关如何调试此类内容的一些提示。
如果您怀疑出现问题,首先要输出生成的查询。像这样:
$query = "DELETE FROM accounts WHERE id=".$id."LIMIT 1";
echo $query; // for debugging
这将告诉您查询至少有一个问题:LIMIT
之前缺少空格。
mysql_query()
会返回false
。您可以检查,然后使用mysql_error()
输出。像这样:
$result = mysql_query($query);
if(!$result) trigger_error("Database error!: ".mysql_error());
如果$id
来自外部,例如$ _GET数组,请确保在查询中使用它之前测试它是否为整数以避免SQL injection。
答案 3 :(得分:1)
首先:$ id的值实际上是数据库中的id吗?其次,在“LIMIT”之前需要一个空格,即:
" LIMIT 1".
答案 4 :(得分:1)
您的错误来自PHP编译器。你是否在第15行做了类似的事情:
if (delAccount(...) = false) { ... }
?如果是,请更改为==
。