Мы получаем запросы на информацию о том, как настроены образы нашего базового сервера, особенно в отношении поддержки базы данных. Этот пост посвящен тому, как легко использовать базы данных — в данном случае MySQL , хотя многие другие базы данных также поддерживаются.
Рассказ
Базовый образ сервера, предоставленный Bowery, имеет настроенные и работающие по умолчанию MySQL и MongoDB, и, в частности, MySQL имеет пользователя и базу данных, созданные для вас. Вот подробности базовой настройки:
- база данных:
defaultdb
- пользователь:
root
- проходят:
changeme
- хост:
localhost
Пока ваш код использует эту конфигурацию, вы должны иметь возможность подключаться и использовать базу данных, которая уже запущена на вашем экземпляре.
Длинная история
Мы уже обсуждали использование phpMyAdmin, которое позволяет вам иметь веб-браузер базы данных для ваших проектов PHP. Вот простой пример PHP-скрипта, который показывает, как вы можете работать с вашей базой данных. Не стесняйтесь также добавлять phpMyAdmin в ваш проект, и вы можете проверять базу данных на каждом этапе.
ОБРАЗЕЦ КОДА
<?php /** * This file demonstrates connecting and working with a MySQL * database via mysqli interface, using standard configuration * provided by Bowery (http://bowery.io). * If you are wanting to run a totally different stack, you * are encouraged to do so, and share your setup. * REMEMBER: You are also free to drop a copy of phpMyAdmin * right into your app folder, and then you can connect and * use it from the server at your IP address. **/ /** * Configuration **/ error_reporting(E_ERROR); ini_set('display_errors', 1); $config = new stdClass; $config->host = 'localhost'; $config->db = 'defaultdb'; $config->user = 'root'; $config->pass = 'changeme'; // Welcome text function welcome() { $content = <<<EOT <h2>Example MySQL Script</h2> <p>This is just a simple little script to demonstrate how you can play around with MySQL and PHP with Bowery.io.</p> <ul> <li>Use <a href="?task=info">task=info</a> for phpinfo() output.</li> <li>Use <a href="?task=checkConnection">task=checkConnection</a> to see if your database connection is correct.</li> <li>Use <a href="?task=createTest">task=createTest</a> to create the test table.</li> <li>Use <a href="?task=loadTest">task=loadTest</a> to load some data into the test table.</li> <li>Use <a href="?task=listTest">task=listTest</a> to list the contents of the test table.</li> <li>Use <a href="?task=dropTest">task=dropTest</a> to drop the contents of the test table.</li> <li>Use <a href="/phpmyadmin">phpMyAdmin</a> just to be sure all is good and well in database land. REMEMBER: your database account is root / changeme and your database is defaultdb.</li> </ul> EOT; echo $content; } // Use this to see if your MySQL connection is active function checkConnection($config) { $mysqli = new mysqli($config->host, $config->user, $config->pass, $config->db); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } echo $mysqli->host_info . "\n"; } // Use this to create the test table function createTest($config){ $mysqli = new mysqli($config->host, $config->user, $config->pass, $config->db); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } $sql = "CREATE TABLE test (c1 INT AUTO_INCREMENT NOT NULL PRIMARY KEY, c2 VARCHAR(64))"; if (!$mysqli->query( $sql )) { echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error; } else { echo 'Table created successfully. Want to <a href="?task=loadTest">load some data</a>?'; } } // Use this to load some test data into the test table function loadTest($config){ $mysqli = new mysqli($config->host, $config->user, $config->pass, $config->db); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } $sql = "INSERT INTO test (c2) VALUES ('one'), ('two'), ('three'), ('four'), ('bet you were looking for five')"; if (!$mysqli->query( $sql )) { echo "Data insert failed: (" . $mysqli->errno . ") " . $mysqli->error; } else { echo 'Data populated successfully. Want to <a href="?task=listTest">see some data</a>?'; } } // Use this to list the data in the test table function listTest($config){ $mysqli = new mysqli($config->host, $config->user, $config->pass, $config->db); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } $sql = "SELECT * FROM test ORDER BY c1, c2"; $mysqli->real_query($sql); $res = $mysqli->use_result(); while ($row = $res->fetch_assoc()) { echo " c1 = " . $row['c1'] . ", c2 = " . $row['c2'] . "<br>\n"; } echo '<p>Table listed successfully. Want to <a href="?task=dropTest">drop the data</a>?</p>'; } // Use this to drop the test table function dropTest($config){ $mysqli = new mysqli($config->host, $config->user, $config->pass, $config->db); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } $sql = "DROP TABLE test"; if (!$mysqli->query( $sql )) { echo "Table drop failed: (" . $mysqli->errno . ") " . $mysqli->error; } else { echo 'Table dropped successfully. Want to <a href="/">start over</a>?'; } } // Hey, this is an example script, whadda you want, a CMS? switch ($_GET['task']) { case 'info': phpinfo(); break; case 'checkConnection': checkConnection($config); break; case 'createTest': createTest($config); break; case 'loadTest': loadTest($config); break; case 'listTest': listTest($config); break; case 'dropTest': dropTest($config); break; default: welcome(); }
Но подождите, есть еще
Если вы используете язык, отличный от PHP (например, Node.js или Ruby on Rails ), или вам нужно что-то отличное от MySQL, такое как MongoDB прямо из коробки или Orchestrate.io , мы предоставим вам информацию. Поскольку наш базовый образ — Ubuntu 14.04 LTS, вы можете установить практически любую базу данных и драйвер, какие только можете себе представить.
Мы работаем над новым выпуском, который сделает настройку вашей среды очень простой и даст вам массу контроля. Оставайтесь в курсе!
Возникли проблемы с запуском? Мы здесь, чтобы помочь, и мы всегда ищем запросы! Обратитесь к нам по адресу @boweryio .