2015-01-02 2 views
0

Я выполняю проект и использую PDO внутри класса, все функции работают как шарм, но у меня есть тот, который возвращает неверную ошибку источника данных, вот текстовая копия:PDO недопустимый исходный код источника данных

Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in /home/decoded/public_html/studiobug/xxxx/class.php:194

Stack trace:

#0 /home/decoded/public_html/studiobug/xxxx/class.php(194): 
PDO->__construct('DB_DSN', 'DB_USERNAME', 'DB_PASSWORD') 
#1 /home/decoded/public_html/studiobug/xxxx/deleteQuiz.php(5): 
Admin->goodByeQuiz('2') 
#2 {main} thrown in 
/home/decoded/public_html/studiobug/xxxx/class.php on line 194 

И вот 2 общедоступных функции внутри класса, первый из них отлично работает, а второй - тот, который возвращает мне эту ошибку. Я не могу найти то, что происходит, поскольку код почти тот же, меняются только запросы.

public function saveEditQuestions($quizno,$todo) { 
$table = "quiz".$quizno."Questions"; 
$sql = ""; 
    $sql .= "TRUNCATE $table;"; 
foreach ($todo as $c => $v){   
    $sql .= "INSERT INTO $table SET "; 
    $sql .= "option1 = '".$v['Answer1']."', "; 
    $sql .= "option2 = '".$v['Answer2']."'; "; 
} 

    $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); 

try { 
$stmt = $con->prepare($sql); 
$success = $stmt->execute(); 
return $success; 
} 
catch (PDOException $e) 
{ 
echo $e->getMessage(); 
die(); 
} 
} 
public function goodByeQuiz($del) {  
    $table1 = "quiz".$del."Questions"; 
    $table2 = "quiz".$del."Results"; 
    $sql = "UPDATE formStatus set active = 0 WHERE formNumber = $del;"; 
    $sql .= "TRUNCATE $table1;"; 
    $sql .= "TRUNCATE $table2;"; 

    $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); 

try { 
$stmt = $con->prepare($sql); 
$success = $stmt->execute(); 
return $success; 
} 
catch (PDOException $e) 
{ 
echo $e->getMessage(); 
die(); 
} 
} 
+0

Определили ли вы DB_DSN, DB_USERNAME и DB_PASSWORD? –

+0

Да, конечно, первая функция (saveEditQuestions) работает нормально, когда я вызываю вторую, я получаю это исключение –

+1

Тот факт, что stacktrace упоминает '' DB_DSN'' (строка), указывает, что такой константы нет (если вы проверите в журнале ошибок PHP вы увидите уведомление PHP, жалующееся на это). Просмотрите код, который определяет эти константы, скорее всего, он не будет включен, когда вы вызываете вторую функцию. – DCoder

ответ

1

Проблема, кажется, связана с вашими соединениями. Используйте его, как это ....

connect.php

<?php 
$db_host = "localhost"; 
$db_name = "blogdata"; 
$db_user = "username"; 
$db_pass = "password"; 
$db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
?> 

И в ваших функциях,

require 'connect.php'; 

И использовать это соединение везде, где вы хотите

+0

Это сделал это, но мне все еще интересно, почему не было «признано» в какой-то конкретной функции, и это было хорошо в других ... –

+0

Thats, что объяснил Dcoder ... », скорее всего, он не включается, когда вы вызываете вторую функцию ». –

+0

Да, но опять же, почему бы не включить эту функцию, и они были на других? ничего, я доволен этим решением. благодаря –

Смежные вопросы