我正在尝试通过ajax响应执行一小段代码。我有ID传递,但由于某种原因我的删除语句失败(不删除记录,因此添加到$ err数组)。我确定这是一个愚蠢的事情,但它现在不会向我跳出来。
PHP代码
<?php
define('INCLUDE_CHECK',true);
require '../../connect.php';
require '../../functions.php';
// Those two files can be included only if INCLUDE_CHECK is defined
// sets site to require https
echo redirectToHTTPS();
session_name('tzLogin');
session_set_cookie_params(2*7*24*60*60);
session_start();
if (isset($_POST['id']) && $_SESSION['id'] && $_SESSION['permlvl']==3 )
{
$id = is_numeric($_POST['id']);
$err = array();
$query = "DELETE FROM employees WHERE id = :id";
$statement = $db -> prepare($query);
$statement -> BindParam('id', $id, PDO::PARAM_INT);
$result = $statement -> execute();
$statement -> closecursor();
if ($result === true){
}
else{
$err[] = "error";
}
}
//check for error messages
if(!count($err))
{
echo 'success';
}
else{
//on failure, future will include logging either by sending email or writing to a log file
}
?>
UPDATE 我已经改变了db错误模式,可以显示它。所以它必须与我的数据库的设计方式有关。
致命错误:未捕获的异常'PDOException' 消息'SQLSTATE [23000]:完整性约束违规:1451不能 删除或更新父行:外键约束失败 (
login
。thrives
,CONSTRAINTthrives_ibfk_1
外键(n_emp
) 参考文献employees
(ID
))'in /Applications/XAMPP/xamppfiles/htdocs/jen/maintabs/Employees/delete.php:23 堆栈跟踪: #0 /Applications/XAMPP/xamppfiles/htdocs/jen/maintabs/Employees/delete.php(23): PDOStatement-&GT;执行() /Applications/XAMPP/xamppfiles/htdocs/jen/maintabs/Employees/delete.php 中抛出#1 {main} 在线 23
答案 0 :(得分:6)
$id = is_numeric($_POST['id']);
...
$statement -> BindParam('id', $id, PDO::PARAM_INT);
is_numeric
返回布尔值。 $id
的值为true
或false
,而不是数字。
答案 1 :(得分:4)
我认为你的问题就在这一行:
$id = is_numeric($_POST['id']);
is_numeric
将返回一个bool。我想你想要使用像 intval
(int)$_POST['id']
这样的东西。 (编辑:@zerkms正确指出显式强制转换优于intval()
。在这种情况下,它们在功能上相同,但是the cast is faster.)