我有一个名为User.class.php的类文件,在这个类中我有一段代码:
<?php
define('__ROOT__', dirname(dirname(__FILE__)));
require_once(__ROOT__.'/mysite/generic.php');
?>
我还有一个名为signup.php的文件,我需要使用三个类,所以我有如下代码:
<?php
define('__ROOT__', dirname(dirname(__FILE__)));
require_once(__ROOT__.'/mysite/classes/dbhandler.class.php');
require_once(__ROOT__.'/mysite/classes/User.class.php');
require_once(__ROOT__.'/mysite/includes/password_hash.php');
?>
每次运行signup.php时,都会出现以下错误:
Constant __ROOT__ already defined in signup.php
我尝试过类似的方法,但这也会产生同样的错误:
<?php
if(!defined('__ROOT__')) {
define('__ROOT__', dirname(dirname(__FILE__)));
}
?>
php生成一个错误,但执行一个SQL insert查询。我还有一个名为sign_2.php的文件,它必须执行一个SQL UPDATE查询,当我执行它时,它也会产生相同的错误,但它不会执行UPDATE查询。它运行代码(没有抛出PDOException),但查询不会影响一行(而且查询在PhpMyAdmin SQL控制台中确实有效)。
我不明白问题出在哪里。signup_2.php中的UPDATE查询是否由于常量错误而无法工作,或者是其他原因?执行signup.php时也会出现同样的错误,并且该代码确实完美地执行了INSERT查询。
这是signup_2.php中的更新查询:
$username = $_POST['username'];
$user_ip = $user->get_ip();
$activation_token = $_GET['token'];
// Date time to be used instead of SQL's NOW() function for security purposes
$datetime = date("Y-m-d H:i:s");
try {
$sql = "UPDATE user
SET username=:username,
activation_token=:activation_token,
activation_date_time=:activation_date_time,
activation_status=:activation_status
WHERE activation_token=:current_activation_token";
$stmt = $dbh->get_instance()->prepare($sql);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':activation_token', $empty_activation_token, PDO::PARAM_STR);
$stmt->bindParam(':activation_date_time', $datetime, PDO::PARAM_STR);
$stmt->bindParam(':activation_status', $active_status, PDO::PARAM_STR);
$stmt->bindParam(':current_activation_token', $activation_token, PDO::PARAM_STR);
$stmt->execute();
echo 'Username: ' . $username . '<br />';
echo 'Activation token: ' . $empty_activation_token . '<br />';
echo 'Activation date time: ' . $datetime . '<br />';
echo 'Activation status: ' . $active_status . '<br />';
echo 'Current activation token: ' . $activation_token . '<br />';
}
catch(PDOException $e) {
echo $e;
}
try块中的所有echo都被执行,并且没有抛出异常,但是查询似乎什么也没做。我已经仔细检查了所有的值,当在PhpMyAdmin中执行时,它可以工作。
怎么回事?我只是找不到执行简单更新查询的问题。
删除signup.php和signup_2.php中的常量会产生以下错误:
Use of undefined constant __ROOT__ - assumed '__ROOT__' in signup.php...
我已经试过我所知道的一切了。
最佳答案
User.class.php类已经具有
define('__ROOT__', dirname(dirname(__FILE__)));
从signup.php中删除此项,因为您正在导入User.class.php和define is类型的常量值一旦设置就不能更改。
其他修复
创建新文件call Constants.php
define('__ROOT__', dirname(dirname(__FILE__)));
现在是每个文件的顶部
include_once 'Constants.php';
关于php - 常量已经定义PHP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30785052/