MYSQL Сбрасывает всю базу данных и игнорирует QUERY - PullRequest
0 голосов
/ 15 марта 2012

Я использую этот код PHP для выгрузки столбца из таблицы MYSQL в текстовый файл, но в итоге он либо сбрасывает данные или всю базу данных, а не подтверждает оператор SQL и выдает данные только из этого столбца.сам.Что я делаю не так?

$file = 'file.txt';
if(is_file($file))
    unlink($file);      
$sql = 'SELECT column FROM table';

Я пробовал разные командные строки, строка ниже:$cmd = 'mysqldump --user=xxx --host=localhost --password=xxx mydatabase \''.$sql.'\' > '.$file;

Сбрасывает группу текста, такую ​​как,

    -- Server version   5.0.95-community   
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

и эта строка выгружает всю базу данных в файл:

$cmd = 'mysqldump --user=xxx --password=xxx --host=localhost mydatabase > file.txt';
exec($cmd);

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

Ответы [ 5 ]

1 голос
/ 15 марта 2012

Я не помню, чтобы mysqldump когда-либо принимал запрос в качестве опции.

Возможно, просто .. запустите запрос?

0 голосов
/ 16 марта 2012

Я понял, пользовательская командная строка , созданная пользователем для аналогичной проблемы .

Так что теперь у меня есть:

$cmd = "mysql --user=xxx --password=xxx --host=localhost --database=xxx --execute='SELECT `column` FROM Table LIMIT 0, 10000 '> file.txt";
exec($cmd);

Это именно то, что мне нужно. Единственная проблема заключается в том, что он не работает с XAMPP, только на моем веб-сервере. Может быть, нужно пролить свет на это. Спасибо тем, кто предоставил свой код.

0 голосов
/ 16 марта 2012

Вы почти там добавили опцию -w, а затем условия из условия where вашего выбора, например:

mysqldump -uroot -p  dbname tablename -w "id > 100 and income > 2000;" > output.txt
0 голосов
/ 15 марта 2012

Используйте клиент mysql с пользовательским запросом вместо mysqldump:

$cmd = 'mysql --user=xxx --password=xxx --host=localhost --skip-column-names mydatabase -e \"SELECT column FROM table\" > file.txt';
exec($cmd);
0 голосов
/ 15 марта 2012

Я бы предложил установить соединение, запустить запрос, fopen('file.txt', 'w'), затем выполнить цикл по результатам запроса и fwrite в файл.

Может быть что-то вроде этого ... конечно, ваша строка подключениябудет другим.Я не проверял это, поэтому я перепроверил бы все, прежде чем сделать это живым.

$conn = mysql_connect('localhost', 'mysql_user', 'mysql_password');

if (!$conn) {
    die('Could not connect: ' . mysql_error());
}


$file = 'file.txt'; 

$sql = 'SELECT column FROM table'; 

$results = mysql_query($sql , $conn);

$fh = fopen($file, 'w');
foreach($results as $line){
    fwrite($fh, $line);
}

fclose($fh);
mysql_close($link);
...