我有一個名爲User.class.php類文件和本類中我有這樣一段代碼:恆已經定義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__)));
}
?>
的signup.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塊執行,並不會引發任何異常,但查詢似乎並不做任何事情。我已經加倍檢查了所有的值,並在PhpMyAdmin中執行它的工作。
那麼這裏發生了什麼?我只是無法找到執行簡單的UPDATE查詢的問題。
卸下常數signup.php和signup_2.php產生以下錯誤:
Use of undefined constant __ROOT__ - assumed '__ROOT__' in signup.php...
我已經試過我知道的一切。
你應該在另一個文件中定義你的常量並用'require_once()'調用這個文件。這樣你就可以在任何你想要的地方調用文件,但它們仍然只會被定義一次。 –