with - undefined index error in php mysql
Reference-What does this error mean in PHP? (20)
What is this?
This is a number of answers about warnings, errors and notices you might encounter while programming PHP and have no clue how to fix. This is also a Community Wiki, so everyone is invited to participate in adding to and maintaining this list.
Why is this?
Questions like "Headers already sent" or "Calling a member of a non-object" pop up frequently on Stack Overflow. The root cause of those questions is always the same. So the answers to those questions typically repeat them and then show the OP which line to change in his/her particular case. These answers do not add any value to the site because they only apply to the OP's particular code. Other users having the same error can not easily read the solution out of it because they are too localized. That is sad, because once you understood the root cause, fixing the error is trivial. Hence, this list tries to explain the solution in a general way to apply.
What should I do here?
If your question has been marked as a duplicate of this, please find your error message below and apply the fix to your code. The answers usually contain further links to investigate in case it shouldn't be clear from the general answer alone.
If you want to contribute, please add your "favorite" error message, warning or notice, one per answer, a short description what it means (even if it is only highlighting terms to their manual page), a possible solution or debugging approach and a listing of existing Q&A that are of value. Also, feel free to improve any existing answers.
The List
- Nothing is seen. The page is empty and white. (also known as White Page/Screen Of Death)
- Code doesn't run/what looks like parts of my PHP code are output
- Warning: Cannot modify header information - headers already sent
- Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given a.k.a.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource a.k.a.
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given (or similar variations) - Warning: [function] expects parameter 1 to be resource, boolean given
- Warning: [function]: failed to open stream: [reason]
- Warning: open_basedir restriction in effect
- Warning: Division by zero
- Warning: Illegal string offset 'XXX'
- Parse error: syntax error, unexpected '['
- Parse error: syntax error, unexpected T_XXX
- Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE
- Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
- Parse error: syntax error, unexpected 'require_once' (T_REQUIRE_ONCE), expecting function (T_FUNCTION)
- Parse error: syntax error, unexpected T_VARIABLE
- Fatal error: Allowed memory size of XXX bytes exhausted (tried to allocate XXX bytes)
- Fatal error: Call to a member function ... on a non-object
- Fatal Error: Call to Undefined function XXX
- Fatal Error: Cannot redeclare XXX
- Fatal error: Can't use function return value in write context
- Fatal error: Declaration of AAA::BBB() must be compatible with that of CCC::BBB() '
- Fatal error: Using $this when not in object context
- Notice: Array to string conversion
- Notice: Trying to get property of non-object error
- Notice: Undefined variable
- Notice: Undefined Index
- Notice: Undefined offset XXX [Reference]
- Notice: Uninitialized string offset: XXX
- Notice: Use of undefined constant XXX - assumed 'XXX'
- MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ... at line ...
- Strict Standards: Non-static method [<class>::<method>] should not be called statically
- Warning: function expects parameter X to be boolean/string/integer
Also see
Code doesn't run/what looks like parts of my PHP code are output
If you see no result from your PHP code whatsoever and/or you are seeing parts of your literal PHP source code output in the webpage, you can be pretty sure that your PHP isn't actually getting executed. If you use View Source in your browser, you're probably seeing the whole PHP source code file as is. Since PHP code is embedded in <?php ?>
tags, the browser will try to interpret those as HTML tags and the result may look somewhat confused.
To actually run your PHP scripts, you need:
- a web server which executes your script
- to set the file extension to .php, otherwise the web server won't interpret it as such*
- to access your .php file via the web server
* Unless you reconfigure it, everything can be configured.
This last one is particularly important. Just double clicking the file will likely open it in your browser using an address such as:
file://C:/path/to/my/file.php
This is completely bypassing any web server you may have running and the file is not getting interpreted. You need to visit the URL of the file on your web server, likely something like:
http://localhost/my/file.php
You may also want to check whether you're using short open tags <?
instead of <?php
and your PHP configuration has turned short open tags off.
Also see PHP code is not being executed, instead code shows on the page
Fatal error: Allowed memory size of XXX bytes exhausted (tried to allocate XXX bytes)
There is not enough memory to run your script. PHP has reached the memory limit and stops executing it. This error is fatal, the script stops. The value of the memory limit can be configured either in the php.ini
file or by using ini_set('memory_limit', '128 M');
in the script (which will overwrite the value defined in php.ini
). The purpose of the memory limit is to prevent a single PHP script from gobbling up all the available memory and bringing the whole web server down.
The first thing to do is to minimise the amount of memory your script needs. For instance, if you're reading a large file into a variable or are fetching many records from a database and are storing them all in an array, that may use a lot of memory. Change your code to instead read the file line by line or fetch database records one at a time without storing them all in memory. This does require a bit of a conceptual awareness of what's going on behind the scenes and when data is stored in memory vs. elsewhere.
If this error occurred when your script was not doing memory-intensive work, you need to check your code to see whether there is a memory leak. The memory_get_usage
function is your friend.
Related Questions:
- All "Fatal error: Allowed memory size of XXX bytes exhausted" Questions on
Fatal error: Call to undefined function XXX
Happens when you try to call a function that is not defined yet. Common causes include missing extensions and includes, conditional function declaration, function in function declaration or simple typos.
Example 1 - Conditional Function Declaration
$someCondition = false;
if ($someCondition === true) {
function fn() {
return 1;
}
}
echo fn(); // triggers error
In this case, fn()
will never be declared because $someCondition
is not true.
Example 2 - Function in Function Declaration
function createFn()
{
function fn() {
return 1;
}
}
echo fn(); // triggers error
In this case, fn
will only be declared once createFn()
gets called. Note that subsequent calls to createFn()
will trigger an error about Redeclaration of an Existing function.
You may also see this for a PHP built-in function. Try searching for the function in the official manual, and check what "extension" (PHP module) it belongs to, and what versions of PHP support it.
In case of a missing extension, install that extension and enable it in php.ini. Refer to the Installation Instructions in the PHP Manual for the extension your function appears in. You may also be able to enable or install the extension using your package manager (e.g. apt
in Debian or Ubuntu, yum
in Red Hat or CentOS), or a control panel in a shared hosting environment.
If the function was introduced in a newer version of PHP from what you are using, you may find links to alternative implementations in the manual or its comment section. If it has been removed from PHP, look for information about why, as it may no longer be necessary.
In case of missing includes, make sure to include the file declaring the function before calling the function.
In case of typos, fix the typo.
Related Questions:
- https://.com/search?q=Fatal+error%3A+Call+to+undefined+function
Fatal error: Can't use function return value in write context
This usually happens when using a function directly with empty
.
Example:
if (empty(is_null(null))) {
echo 'empty';
}
This is because empty
is a language construct and not a function, it cannot be called with an expression as its argument in PHP versions before 5.5. Prior to PHP 5.5, the argument to empty()
must be a variable, but an arbitrary expression (such as a the return value of a function) is permissible in PHP 5.5+.
empty
, despite its name, does not actually check if a variable is "empty". Instead, it checks if a variable doesn't exist, or == false
. Expressions (like is_null(null)
in the example) will always be deemed to exist, so here empty
is only checking if it is equal to false. You could replace empty()
here with !
, e.g. if (!is_null(null))
, or explicitly compare to false, e.g. if (is_null(null) == false)
.
Related Questions:
Fatal error: Using $this when not in object context
$this
is a special variable in PHP which can not be assigned. If it is accessed in a context where it does not exist, this fatal error is given.
This error can occur:
If a non-static method is called statically. Example:
class Foo { protected $var; public function __construct($var) { $this->var = $var; } public static function bar () { // ^^^^^^ echo $this->var; // ^^^^^ } } Foo::bar();
How to fix: review your code again,
$this
can only be used in object context, and should never be used in a static method. Also, a static method should not access the non-static property. Useself::$static_property
to access the static property.If code from a class method has been copied over into a normal function or just the global scope and keeping the
$this
special variable.
How to fix: Review the code and replace$this
with a different substitution variable.
Related Questions:
- Call non-static method as static: PHP Fatal error: Using $this when not in object context
- Copy over code: Fatal error: Using $this when not in object context
- All "Using $this when not in object context" Questions on
Fatal error: [TraitA] and [TraitB] define the same property ([$x]) in the composition of [ClassC]
Occurs when a class attempts to use
multiple Traits, where two or more of those Traits have defined a property by the same name, and with the property having differing initial values.
Example:
<?php
trait TraitA
{
public $x = 'a';
}
trait TraitB
{
public $x = 'b';
}
class ClassC
{
use TraitA, TraitB;
}
Problematic: While it's possible to resolve conflicts between competing methods, there is currently no syntax that would resolve a conflict between two competing properties. The only solution at this time is to refactor; i.e., avoid a conflict between property names that produces a fatal error.
Related Questions:
Nothing is seen. The page is empty and white.
Also known as the White Page Of Death or White Screen Of Death. This happens when error reporting is turned off and a fatal error (often syntax error) occurred.
If you have error logging enabled, you will find the concrete error message in your error log. This will usually be in a file called "php_errors.log", either in a central location (e.g. /var/log/apache2
on many Linux environments) or in the directory of the script itself (sometimes used in a shared hosting environment).
Sometimes it might be more straightforward to temporarily enable the display of errors. The white page will then display the error message. Take care because these errors are visible to everybody visiting the website.
This can be easily done by adding at the top of the script the following PHP code:
ini_set('display_errors', 1); error_reporting(~0);
The code will turn on the display of errors and set reporting to the highest level.
Since the ini_set()
is executed at runtime it has no effects on parsing/syntax errors. Those errors will appear in the log. If you want to display them in the output as well (e.g. in a browser) you have to set the display_startup_errors
directive to true
. Do this either in the php.ini
or in a .htaccess
or by any other method that affects the configuration before runtime.
You can use the same methods to set the log_errors and error_log directives to choose your own log file location.
Looking in the log or using the display, you will get a much better error message and the line of code where your script comes to halt.
Related questions:
- PHP's white screen of death
- White screen of death!
- PHP Does Not Display Error Messages
- PHP emitting 500 on errors - where is this documented?
- How to get useful error messages in PHP?
- All PHP "White Page of Death" Questions on
Related errors:
- Parse error: syntax error, unexpected T_XXX
- Fatal error: Call to a member function ... on a non-object
- Code doesn't run/what looks like parts of my PHP code are output
Notice: Array to string conversion
This simply happens if you try to treat an array as a string:
$arr = array('foo', 'bar');
echo $arr; // Notice: Array to string conversion
$str = 'Something, ' . $arr; // Notice: Array to string conversion
An array cannot simply be echo
'd or concatenated with a string, because the result is not well defined. PHP will use the string "Array" in place of the array, and trigger the notice to point out that that's probably not what was intended and that you should be checking your code here. You probably want something like this instead:
echo $arr[0]; // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar
Or loop the array:
foreach($arr as $key => $value) {
echo "array $key = $value";
// displays first: array 0 = foo
// displays next: array 1 = bar
}
If this notice appears somewhere you don't expect, it means a variable which you thought is a string is actually an array. That means you have a bug in your code which makes this variable an array instead of the string you expect.
Notice: Undefined Index
Happens when you try to access an array by a key that does not exist in the array.
A typical example for an Undefined Index
notice would be (demo)
$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];
Both spinach
and 1
do not exist in the array, causing an E_NOTICE
to be triggered.
The solution is to make sure the index or offset exists prior to accessing that index. This may mean that you need to fix a bug in your program to ensure that those indexes do exist when you expect them to. Or it may mean that you need to test whether the indexes exist using array_key_exists
or isset
:
$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
echo $data['spinach'];
}
else {
echo 'No key spinach in array';
}
If you have code like:
<?php echo $_POST['message']; ?>
<form method="post" action="">
<input type="text" name="message">
...
then $_POST['message']
will not be set when this page is first loaded and you will get the above error. Only when the form is submitted and this code is run a second time will the array index exist. You typically check for this with:
if ($_POST) .. // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') .. // page was requested with POST
Related Questions:
- Reference: “Notice: Undefined variable” and “Notice: Undefined index”
- All PHP "Notice: Undefined Index" Questions on
- http://php.net/arrays
Notice: Undefined variable
Happens when you try to use a variable that wasn't previously defined.
A typical example would be
foreach ($items as $item) {
// do something with item
$counter++;
}
If you didn't define $counter
before, the code above will trigger the notice.
The correct way would be to set the variable before using it, even if it's just an empty string like
$counter = 0;
foreach ($items as $item) {
// do something with item
$counter++;
}
Related Questions:
Notice: Use of undefined constant XXX - assumed 'XXX'
or, in PHP 7.2 or later:
Warning: Use of undefined constant XXX - assumed 'XXX' (this will throw an Error in a future version of PHP)
This notice occurs when a token is used in the code and appears to be a constant, but a constant by that name is not defined.
One of the most common causes of this notice is failure to quote a string used as an associative array key.
For example:
// Wrong
echo $array[key];
// Right
echo $array['key'];
Another common causes is a missing $
(dollar) sign in front of a variable name:
// Wrong
echo varName;
// Right
echo $varName;
Or perhaps you have misspelled some other constant or keyword:
// Wrong
$foo = fasle;
// Right
$foo = false;
It can also be a sign that a needed PHP extension or library is missing when you try to access a constant defined by that library.
Related Questions:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE
This error is most often encountered when attempting to reference an array value with a quoted key for interpolation inside a double-quoted string, when the entire complex variable construct is not enclosed in {}
.
The error case:
This will result in Unexpected T_ENCAPSED_AND_WHITESPACE
:
echo "This is a double-quoted string with a quoted array key in $array['key']";
//---------------------------------------------------------------------^^^^^
Possible fixes:
In a double-quoted string, PHP will permit array key strings to be used unquoted, and will not issue an E_NOTICE
. So the above could be written as:
echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^
The entire complex array variable and key(s) can be enclosed in {}
, in which case they should be quoted to avoid an E_NOTICE
. The PHP documentation recommends this syntax for complex variables.
echo "This is a double-quoted string with a quoted array key in {$array['key']}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array['key']}";
Of course, the alternative to any of the above is to concatenate the array variable in instead of interpolate it:
echo "This is a double-quoted string with an array variable " . $array['key'] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^
For reference, see the section on Variable Parsing in the PHP Strings manual page
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
The scope resolution operator is also called "Paamayim Nekudotayim" from the Hebrew פעמיים נקודתיים. which means "double colon" or "double dot twice".
This error typically happens if you inadvertently put ::
in your code.
Related Questions:
- Reference: PHP Parse/Syntax Errors; and How to solve them?
- What do two colons mean in PHP?
- What's the difference between :: (double colon) and -> (arrow) in PHP?
- Unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting T_NS_Separator
Documentation:
Parse error: syntax error, unexpected T_VARIABLE
Possible scenario
I can't seem to find where my code has went wrong. Here is my full error:
Parse error: syntax error, unexpected T_VARIABLE on line x
What I am trying
$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';
Answer
Parse error: A problem with the syntax of your program, such as leaving a semicolon off of the end of a statement or, like the case above, missing the .
operator. The interpreter stops running your program when it encounters a parse error.
In simple words this is a syntax error, meaning that there is something in your code stopping it from being parsed correctly and therefore running.
What you should do is check carefully at the lines around where the error is for any simple mistakes.
That error message means that in line x of the file, the PHP interpreter was expecting to see an open parenthesis but instead, it encountered something called T_VARIABLE
. That T_VARIABLE
thing is called a token
. It's the PHP interpreter's way of expressing different fundamental parts of programs. When the interpreter reads in a program, it translates what you've written into a list of tokens. Wherever you put a variable in your program, there is aT_VARIABLE
token in the interpreter's list.
Good read: List of Parser Tokens
So make sure you enable at least E_PARSE
in your php.ini
. Parse errors should not exist in production scripts.
I always recommended to add the following statement, while coding:
error_reporting(E_ALL);
Also a good idea to use an IDE which will let you know parse errors while typing. You can use:
- NetBeans (fine peace of beauty, free software) (the best in my opinion)
- PhpStorm (uncle Gordon love this: P, paid plan, contains proprietary and free software)
- Eclipse (beauty and the beast, free software)
Related Questions:
- Reference: PHP Parse/Syntax Errors; and How to solve them?
Strict Standards: Non-static method [<class>::<method>] should not be called statically
Occurs when you try to call a non-static method on a class as it was static, and you also have the E_STRICT
flag in your error_reporting()
settings.
Example :
class HTML {
public function br() {
echo '<br>';
}
}
HTML::br()
or $html::br()
You can actually avoid this error by not adding E_STRICT
to error_reporting()
, eg
error_reporting(E_ALL & ~E_STRICT);
since as for PHP 5.4.0 and above, E_STRICT
is included in E_ALL
[ref]. But that is not adviceable. The solution is to define your intended static function as actual static
:
public static function br() {
echo '<br>';
}
or call the function conventionally :
$html = new HTML();
$html->br();
Related questions :
Warning: [function] expects parameter 1 to be resource, boolean given
(A more general variation of Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given)
Resources are a type in PHP (like strings, integers or objects). A resource is an opaque blob with no inherently meaningful value of its own. A resource is specific to and defined by a certain set of PHP functions or extension. For instance, the Mysql extension defines two resource types:
There are two resource types used in the MySQL module. The first one is the link identifier for a database connection, the second a resource which holds the result of a query.
The cURL extension defines another two resource types:
... a cURL handle and a cURL multi handle.
When var_dump
ed, the values look like this:
$resource = curl_init();
var_dump($resource);
resource(1) of type (curl)
That's all most resources are, a numeric identifier ((1)
) of a certain type ((curl)
).
You carry these resources around and pass them to different functions for which such a resource means something. Typically these functions allocate certain data in the background and a resource is just a reference which they use to keep track of this data internally.
The "... expects parameter 1 to be resource, boolean given" error is typically the result of an unchecked operation that was supposed to create a resource, but returned false
instead. For instance, the fopen
function has this description:
Return Values
Returns a file pointer resource on success, or
FALSE
on error.
So in this code, $fp
will either be a resource(x) of type (stream)
or false
:
$fp = fopen(...);
If you do not check whether the fopen
operation succeed or failed and hence whether $fp
is a valid resource or false
and pass $fp
to another function which expects a resource, you may get the above error:
$fp = fopen(...);
$data = fread($fp, 1024);
Warning: fread() expects parameter 1 to be resource, boolean given
You always need to error check the return value of functions which are trying to allocate a resource and may fail:
$fp = fopen(...);
if (!$fp) {
trigger_error('Failed to allocate resource');
exit;
}
$data = fread($fp, 1024);
Related Errors:
Warning: Cannot modify header information - headers already sent
Happens when your script tries to send a HTTP header to the client but there already was output before, which resulted in headers to be already sent to the client.
This is an E_WARNING
and it will not stop the script.
A typical example would be a template file like this:
<html>
<?php session_start(); ?>
<head><title>My Page</title>
</html>
...
The session_start()
function will try to send headers with the session cookie to the client. But PHP already sent headers when it wrote the <html>
element to the output stream. You'd have to move the session_start()
to the top.
You can solve this by going through the lines before the code triggering the Warning and check where it outputs. Move any header sending code before that code.
An often overlooked output is new lines after PHP's closing ?>
. It is considered a standard practice to omit ?>
when it is the last thing in the file. Likewise, another common cause for this warning is when the opening <?php
has an empty space, line, or invisible character before it, causing the webserver to send the headers and the whitespace/newline thus when PHP starts parsing won't be able to submit any header.
If your file has more than one <?php ... ?>
code block in it, you should not have any spaces in between them. (Note: You might have multiple blocks if you had code that was automatically constructed)
Also make sure you don't have any Byte Order Marks in your code, for example when the encoding of the script is UTF-8 with BOM.
Related Questions:
- Headers already sent by PHP
- All PHP "Headers already sent" Questions on
- Byte Order Mark
- What PHP Functions Create Output?
Warning: Division by zero
The warning message 'Division by zero' is one of the most commonly asked questions among new PHP developers. This error will not cause an exception, therefore, some developers will occasionally suppress the warning by adding the error suppression operator @ before the expression. For example:
$value = @(2 / 0);
But, like with any warning, the best approach would be to track down the cause of the warning and resolve it. The cause of the warning is going to come from any instance where you attempt to divide by 0, a variable equal to 0, or a variable which has not been assigned (because NULL == 0) because the result will be 'undefined'.
To correct this warning, you should rewrite your expression to check that the value is not 0, if it is, do something else. If the value is zero you should not divide, or change the value to 1 and then divide so the division results in the equivalent of having divided only by the additional variable.
if ( $var1 == 0 ) { // check if var1 equals zero
$var1 = 1; // var1 equaled zero so change var1 to equal one instead
$var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
$var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}
Related Questions:
Warning: mysql_connect(): Access denied for user 'name'@'host'
This warning shows up when you connect to a MySQL/MariaDB server with invalid or missing credentials (username/password). So this is typically not a code problem, but a server configuration issue.
See the manual page on
mysql_connect("localhost", "user", "pw")
for examples.Check that you actually used a
$username
and$password
.- It's uncommon that you gain access using no password - which is what happened when the Warning: said
(using password: NO)
. Only the local test server usually allows to connect with username
root
, no password, and thetest
database name.You can test if they're really correct using the command line client:
mysql --user="username" --password="password" testdb
Username and password are case-sensitive and whitespace is not ignored. If your password contains meta characters like
$
, escape them, or put the password in single quotes.Most shared hosting providers predeclare mysql accounts in relation to the unix user account (sometimes just prefixes or extra numeric suffixes). See the docs for a pattern or documentation, and CPanel or whatever interface for setting a password.
See the MySQL manual on Adding user accounts using the command line. When connected as admin user you can issue a query like:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
Or use Adminer or WorkBench or any other graphical tool to create, check or correct account details.
If you can't fix your credentials, then asking the internet to "please help" will have no effect. Only you and your hosting provider have permissions and sufficient access to diagnose and fix things.
- It's uncommon that you gain access using no password - which is what happened when the Warning: said
Verify that you could reach the database server, using the host name given by your provider:
ping dbserver.hoster.example.net
Check this from a SSH console directly on your webserver. Testing from your local development client to your shared hosting server is rarely meaningful.
Often you just want the server name to be
"localhost"
, which normally utilizes a local named socket when available. Othertimes you can try"127.0.0.1"
as fallback.Should your MySQL/MariaDB server listen on a different port, then use
"servername:3306"
.If that fails, then there's a perhaps a firewall issue. (Off-topic, not a programming question. No remote guess-helping possible.)
When using constants like e.g.
DB_USER
orDB_PASSWORD
, check that they're actually defined.If you get a
"Warning: Access defined for 'DB_USER'@'host'"
and a"Notice: use of undefined constant 'DB_PASS'"
, then that's your problem.Verify that your e.g.
xy/db-config.php
was actually included and whatelse.
Check for correctly set
GRANT
permissions.It's not sufficient to have a
username
+password
pair.Each MySQL/MariaDB account can have an attached set of permissions.
Those can restrict which databases you are allowed to connect to, from which client/server the connection may originate from, and which queries are permitted.
The "Access denied" warning thus may as well show up for
mysql_query
calls, if you don't have permissions toSELECT
from a specific table, orINSERT
/UPDATE
, and more commonlyDELETE
anything.You can adapt account permissions when connected per command line client using the admin account with a query like:
GRANT ALL ON yourdb.* TO 'username'@'localhost';
If the warning shows up first with
Warning: mysql_query(): Access denied for user ''@'localhost'
then you may have a php.ini-preconfigured account/password pair.Check that
mysql.default_user=
andmysql.default_password=
have meaningful values.Oftentimes this is a provider-configuration. So contact their support for mismatches.
Find the documentation of your shared hosting provider:
e.g. HostGator, GoDaddy, 1and1, DigitalOcean, BlueHost, DreamHost, MediaTemple, ixWebhosting, lunarhosting, or just google yours´.
Else consult your webhosting provider through their support channels.
Note that you may also have depleted the available connection pool. You'll get access denied warnings for too many concurrent connections. (You have to investigate the setup. That's an off-topic server configuration issue, not a programming question.)
Your libmysql client version may not be compatible with the database server. Normally MySQL and MariaDB servers can be reached with PHPs compiled in driver. If you have a custom setup, or an outdated PHP version, and a much newer database server, or significantly outdated one - then the version mismatch may prevent connections. (No, you have to investigate yourself. Nobody can guess your setup).
More references:
- Serverfault: mysql access denied for 'root'@'name of the computer'
- Warning: mysql_connect(): Access denied
- Warning: mysql_select_db() Access denied for user ''@'localhost' (using password: NO)
- Access denied for user 'root'@'localhost' with PHPMyAdmin
Btw, you probably don't want to use
mysql_*
functions anymore. Newcomers often migrate to mysqli, which however is just as tedious. Instead read up on PDO and prepared statements.
$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given
First and foremost:
Please, don't use
mysql_*
functions in new code. They are no longer maintained and are officially deprecated. See the red box? Learn about prepared statements instead, and use PDO or MySQLi - this article will help you decide which. If you choose PDO, here is a good tutorial.
This happens when you try to fetch data from the result of mysql_query
but the query failed.
This is a warning and won't stop the script, but will make your program wrong.
You need to check the result returned by mysql_query
by
$res = mysql_query($sql);
if (!$res) {
die(mysql_error());
}
// after checking, do the fetch
Related Questions:
- mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
- All "mysql_fetch_array() expects parameter 1 to be resource, boolean given" Questions on
Related Errors:
Other mysql*
functions that also expect a mysql result resource as parameter will produce the same error for the same reason.