I have a nice free for searching a database. It was written with PHP and MySql...however for whatever reason, I occasionally need to add an "i" at the end of MySql occasionally to get things working. I can connect and login, but not select the database, since it passes through until I get the
"request "Unable to select database."
Here's the meat from the config.php file that probably has the issue :
$SETTINGS["hostname"]='localhost';
$SETTINGS["mysql_user"]='root';
$SETTINGS["mysql_pass"]='root';
$SETTINGS["mysql_database"]='myDB';
$SETTINGS["data_table"]='data'; // this is the default database name that we used
/* Connect to MySQL */
if (!isset($install) or $install != '1') {
$connection = mysqli_connect($SETTINGS["hostname"], $SETTINGS["mysql_user"], $SETTINGS["mysql_pass"]) or die ('Unable to connect to MySQL server.<br ><br >Please make sure your MySQL login details are correct.');
$db = mysqli_select_db($SETTINGS["mysql_database"], $connection) or die ('request "Unable to select database."');
};
?>
The problem you are facing is the line in which you select the database;
$db = mysqli_select_db($SETTINGS["mysql_database"], $connection) or die ('request "Unable to select database."');
As defined by the documentation of mysqli_select_db() the connection $connection ($link in the docs) should be the first argument:
$db = mysqli_select_db($connection, $SETTINGS["mysql_database"]);
The reason why you need to occasionally add an i to every mysql_* function is because all mysql_* functions are officially deprecated, no longer maintained and removed in PHP 7.0.0. You should update your code with PDO or MySQLi to ensure the functionality of your project in the future.
With mysqli, you can select your database directly using the connection method :
$connection = mysqli_connect($SETTINGS["hostname"], $SETTINGS["mysql_user"], $SETTINGS["mysql_pass"], $SETTINGS["mysql_database"]);
If you want to use mysqli_select_db, you need to reverse your arguments. First the connection, then the database :
mysqli_select_db($connection, $SETTINGS["mysql_database"]);
Related
I read more than once that is better to use mysqli and than mysql.
I would like to know:
I'm using WAMP for my local server and some share server for my online sites. what do i need to check on php.ini in order to be sure that mysqli will works?
below is my db connection and query code. how would it looks like using mysqli?
$con = #mysql_connect ("localhost", "username", "pass");
if(!$con)
exit("Unable to connect to the Database server");
$db2 = #mysql_select_db("DB_NAME");
if(!$db2)
exit("Unable to connect to the Database");
$query = mysql_query("SELECT somme_filed FROM some_table");
while ($index= mysql_fetch_array($query ))
{
....
}
most of my site was written in mysql. Do I really need to change all the code to mysqli? Is it really so important?
1.As long as you have only one instance of php installed there should not be any problem but if you have more than one instance you may need to point it manually to the version you wish to use. How do I activate mysqli with wampserver?
2.You can use mysqli to connect by doing something like this
$con = mysqli_connect("localhost","my_user","my_password","my_db");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
3.MYSQL is no longer under development and has been considered deprecated.
Why shouldn't I use MYSQL functions
I just started programming in php and would like to ask a question about the database selection code for mysql in the php coding.
I used phpmyadmin to create a database "admin" when in phpmyadmin I click on privileges and see the name as"admin#127.0.0.1". I created a connection to the database using this code in PHP:
<?php $connection = mysqli_connect("127.0.0.1", "admin", "admin123");
if (!$connection)
die("Database connection failed:" . mysqli_error());
and now i want to select the tables in the database I use this command:
$selected = mysqli_select_db("admin", $connection);
if (!$selected)
{
die('Database selection failed:' .mysqli_error());
}
?>
I know it connects because when only using the connection command when opening my broswer I can see the header i put in html, but I get an error with the selection command and cannot continue.
Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\Program Files\EasyPHP-DevServer-13.1VC11\data\localweb\projects\databaZE.php on line 6##
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\Program Files\EasyPHP-DevServer-13.1VC11\data\localweb\projects\databaZE.php on line 8
Database selection failed:
Firstly is there a problem with the way I wrote my database name thats why it cannot connect and giving me error msg's?I used 127.0.0.1 as database, admin#127.0.0.1 but still same msg. I tried both mysql and mysqli but it doesnt seem to work also.
Edit: first time user sorry am a little confused with inputting code.
You have them the wrong way around,
$selected = mysqli_select_db("admin", $connection);
should be
$selected = mysqli_select_db($connection, "admin");
And
die('Database selection failed:' .mysqli_error());
should be
die('Database selection failed:' .mysqli_error($connection));
I am scratching my empty head with this issue:
When I have my logging data as procedural, everything works fine. I require the file once and can proceed with my select queries. If the connection to the DB file is however written as OOP. I get the error that No database selected
====
<?php
// SETTING VALUES AS CONSTANTS
DEFINE('DB_USER', 'root');
DEFINE('DB_PASSWORD', '');
DEFINE('DB_HOST', 'localhost');
DEFINE('DB_NAME', 'tra');
// CONNECTING JUST TO THE SERVER
$dbc = #mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$dbc) // IF IT CAN'T CONNECT, ISSUE A MESSAGE
{
die('Could not connect: ' . mysql_error());
}
// CONNECTING NOW TO THE DB
mysql_select_db("tra", $dbc);
?>
So that up there works fine. I have got that in a separate file, (out of the root path)
But if I try to do it OOP, then, the rest of the queries that are to work once I have the access to the DB won't work. I sometimes get the query written as output, I mean as if not executing, just the plain text:
$mysqli = new mysqli("localhost", "root", "");
$mysqli->select_db("tra");
I have tried tons of varieties with the OOP version, first instantiating separately such as
$mysqli = new mysli();
$mysqli->connect("127.0.0.1", "root", "", "tra");
or also
$mysqli = new mysqli("localhost", "root", "");
$mysqli-> select_db("tra");
but none of the tries with OOP will work. I mean, I have the book on my lap, so I am writing it ad litteram. The issue must be elsewhere.
The PHP version is 5.3.8 about the latest one.
The sql query that follows after the connection and selection of the DB (which works if the connection file is procedural, as I say) is:
$sql ="SELECT FName
FROM work_assignment, developer
WHERE developer.country = '".$country."'
AND work_assignment.from_language = '".$from."'
AND work_assignment.into_language = '".$into."'
AND work_assignment.developer_id = developer.developer_id
";
Any ideas as to why?
Thanks a lot
From your comment I surmise you're mixing the mysql and mysqli extensions. They are two separate extensions with nothing in common, except that they both connect to MySQL. If you're connecting to the database using a mysqli object, use that object to run your queries. mysql_query will have no active connection, because you did not establish one using a mysql function.
I have finally graduated from MS Access to MySQL. Unfortunately, I can't even get a query right. Can someone please tell me what's wrong? I keep getting the 'invalid query' message that I specified in the php.
<?php
# $db = mysql_connect('localhost', 'root', 'root', 'newdatabase');
if (!$db) {
die ('Failed to connect to the database.');
}
$query = "SELECT first FROM demographics";
$result = mysql_query($query);
if (!$result) {
die('invalid query');
}
while ($row = mysql_fetch_assoc($result)) {
echo $row['first'];
}
?>
Also, the book I am reading tells me to use:
new mysqli('localhost', 'root', 'root', 'newdatabase')
to connect as opposed to the
mysql_connect
I used in the above code. I haven't been able to connect to the db with new mysqli. Does it matter which one I use?
The fourth parameter to mysql_connect() is not the database name. It is a boolean specifying whether or not to establish an additional new connection or use an existing one. Most often, it is omitted. Use mysql_select_db() to choose the database. Since you have not selected a database in your code, your query is likely failing.
$db = mysql_connect('localhost', 'root', 'root');
if (!$db) echo mysql_error();
else mysql_select_db("database");
Note I have removed the # from the mysql_connect() call. # suppresses errors, and was probably preventing you from seeing what was going wrong with your connection.
When testing the success or failure of a query, don't die(). Instead echo out mysql_error() while developing your application. In production, you can replace the echo by writing to error_log() instead.
if (!$result) {
echo mysql_error();
}
As for using MySQLi instead of the basic mysql_* functions, MySQLi can be used in an object oriented fashion and also offers prepared statements, which can be both more efficient to use and more secure. As mentioned in comments above, PDO is often recommended as the most flexible API for interacting with an RDBMS from PHP.
I am new to php syntax and am looking for advice on creating the most acceptable or correct code. I focus on front end design, but I like to make sure my code is proper. I am in a digital media program, my instructor has given us this code for connecting to our MYSQL databases.
<?php
mysql_connect("localhost", "root", "root")or die("Cannot Connect to DB");
mysql_select_db("Example")or die("cannot select the DB Example ");
?>
However when I look at connect scripts online they set the mysql_connect function as a variable lets say $connect and run an if statement stating; if not $connect produce error, and the same for mysql_select_db. They also close the script with mysql_close($connect); like below
<?php
$connect = mysql_connect("localhost", "root", "root");
if (!$connect)
{
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db("Example", $connect);
if (!$db_selected)
{
die ("Can\'t use test_db : " . mysql_error());
}
mysql_close($connect);
?>
Is either one better? What problems can I have if I dont close the connect with mysql_close?
Regarding using an if instead of an or, it doesn't matter. The or short-circuits, so if the connection worked, die(...) won't be executed. Using either is a matter of preference. If you want to use the or version while keeping the result of the mysql_connect() call, simply assign the whole expression to a variable:
$connection = mysql_connect(...) or die('Connection failed.');
mysql_close() should be used after you're done with all your database communication.
The other mysql_*() functions will use the connection created by the latest call to mysql_connect() or mysql_pconnect(). If for some reason you want more than one connection, trusting the implicit connection object in this manner will fail. Better is to store the connection object yourself and passing it in wherever you need it.
Also before starting to work with databases, you should be aware that mysql is not secure anymore and is deprecated, you should use mysqli. You can use it also as object oriented language.
more details : http://www.php.net/manual/en/book.mysqli.php
example :
<?php
$con = mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>