2009-02-12 6 views
0

У меня есть этот код:Как выбрать базу данных mysql в php?

   if(!mysql_connect($host,$user,$passwd)){ 
        die("Hoops, error! ".mysql_error()); 
       } 

... нет ошибки здесь.

   if(!mysql_select_db($db,$connect)){ 
        $create_db = "CREATE DATABASE {$db}"; 
        mysql_query($create_db,$connect); 
        mysql_query("USE DATABASE {$db}",$connect); 
       } 

... «никакая база данных не выбрана» ошибка отсюда. Я хотел бы выбрать базу данных, если она существует, а если нет, то создайте ее и выберите.

Почему мой код не является правильным?

Спасибо заранее

+0

Вы уверены, что $ db - это допустимое имя базы данных ? –

+0

Да, я уверен в этом (его работодатели), я тоже пробовал его без перемены, и он все еще не работал. – Adriana

+0

Что такое брекеты? Я не работал с mysql/php в возрасте, но я этого не помню вообще. – patricksweeney

ответ

3

Где вы спасая значение, возвращенное mysql_connect()? Не см. Здесь. Я предполагаю, что $ host, $ user, $ password и $ db установлены заранее. Но вы передаете параметр mysql_select_db, который может быть неправильно установлен.

$connect = mysql_connect($host,$user,$passwd); 
if (!$connect) { 
    die('Could not connect: ' . mysql_error()); 
} 
if(!mysql_select_db($db,$connect)) ... 

Начните с проверки, чтобы увидеть, если вы можете выбрать без СОЗДАТЬ запроса первым. Попробуйте запустить простой запрос SELECT. Если вы можете подключиться, выберите db и выполните запрос SELECT, это один шаг. Затем попробуйте запрос CREATE. Если это не сработает, это почти наверняка вопрос разрешений.

+0

Мои параметры в порядке. У меня есть переменная $ connect, как вы писали здесь. Соединение без ошибок, оно просто не хочет выбирать db.I понятия не имею. – Adriana

+0

Можете ли вы выполните простой запрос SELECT на $ db? Оставьте запрос CREATE для проверки. Вы получаете сообщение об ошибке? Если да, то возвращается mysql_errno? – PartialOrder

1

Вам может понадобиться базы данных создать разрешения для пользователя, пытающегося создать базу данных. Затем вам необходимо использовать действительный ресурс подключения. $ connect никогда не будет привязан к ресурсу подключения.

+0

тот же пользователь может создать базу данных из командной строки. Я получаю ошибку «Нет выбранной базы данных», не более того. – Adriana

0

Вы должны проверить возвращаемое значение mysql_query() - в настоящее время, если какие-либо из этих вызовов не в состоянии вы не будете знать об этом:

if(!mysql_select_db($db,$connect)){ 
    if (!mysql_query("CREATE DATABASE $db", $connect)) { 
     die(mysql_error()); 
    } 

    if (!mysql_select_db($db, $connect)) { 
     die(mysql_error()); 
    } 
} 
+0

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

1

Почему бы не просто использовать CREATE DATABASE IF NOT EXISTS синтаксиса вместо?

Что-то вроде этого ...

$con = mysql_connect('localhost'); 
    $sql = 'CREATE DATABASE IF NOT EXISTS {$db}'; 
    if (mysql_query($sql, $con)) { 
    print("success.\n"); 
    } else { 
    print("Database {$db} creation failed.\n"); 
    } 
    if(!mysql_select_db($db,$connect)){ 
    print("Database selection failed.\n"); 
    } 
+0

Я пробовал ваш код, но возврат был неудачным и не удалось :(. Переменная $ connect в порядке, она не возвращает никакой ошибки, поэтому я действительно не знаю, где проблема. – Adriana

+0

Похоже, что ваш пользователь MySQL не делает, t имеет достаточные разрешения – staticsan

0

Измените строку

mysql_query($create_db,$connect); 
mysql_query("USE DATABASE {$db}",$connect); 

Для

mysql_query($create_db,$connect); 
mysql_select_db($db);* 

и он должен работать.

+0

Не понимаю, почему это было бы иначе ... –

0

вы можете попробовать сайт w3schools. У них очень простое и легко обучаемое руководство по выбору базы данных. Ссылка есть: http://www.w3schools.com/php/php_mysql_select.asp Надеюсь, эта помощь :)

0

Я хотел бы поблагодарить всех вас, однако я нашел ошибку на своей стороне. Этот скрипт был в классе, и одна из переменных не была определена внутри этого класса. Так что мне очень жаль. Я не знаю, как правильно ответить, но я заметил свою ошибку после прочтения ответа Клейтона о неправильном задании параметров, поэтому я думаю, что он победитель;)

+0

@perfectDay Хороший Дело в том, что проблема решена. Я начинал задаваться вопросом, что случилось с этим ... Спасибо. – PartialOrder

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