Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement'-Collection of common programming errors
When I run the following code, I get the error saying
Fatal error: Uncaught exception ‘mysqli_sql_exception’ with message ‘No index used in query/prepared statement’
$mysql = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('There was a problem connecting to the database');
if (mysqli_connect_errno()) {
printf("DB error: %s", mysqli_connect_error());
exit();
}
$get_emp_list = $mysql->prepare("SELECT id, name FROM calc");
if(!$get_emp_list){
echo "prepare failed\n";
echo "error: ", $mysql->error, "\n";
return;
}
$get_emp_list->execute();
$get_emp_list->bind_result($id, $emp_list);
And this is the able schema —
--
-- Table structure for table `calc`
--
CREATE TABLE IF NOT EXISTS `calc` (
`id` int(12) NOT NULL,
`yr` year(4) NOT NULL,
`mnth` varchar(12) NOT NULL,
`name` varchar(256) NOT NULL,
`paidleave` int(12) NOT NULL,
`balanceleave` int(12) NOT NULL,
`unpaidleave` int(12) NOT NULL,
`basesalary` int(12) NOT NULL,
`deductions` int(12) NOT NULL,
`tds` int(12) NOT NULL,
`pf` int(12) NOT NULL,
`finalsalary` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-
Take a look at this bug-report :
#35450
mysqli extension reports too many warningsQuoting a few sentences of a note :
Mysqli extension throws too many warnings.
For example, “SELECT * FROM table” results in a warning: “Warning: mysqli::query(): No index used in query/prepared statement SELECT * FROM table …”And, quoting another note, which seems interesting :
Use
mysqli_report()
to disable that.Humph, unfortunately, that function is deprecated…
-
The fatal error is not in MySQL; the missing index notification is a relatively low-severity warning.
The fatal error is in your PHP code, because of the following three conditions:
- mysqli reports a lot of warnings, even for relatively harmless conditions.
- You’re throwing
mysqli_sql_exception
for all errors and warnings due to yourmysqli_report(MYSQLI_REPORT_ALL);
line. - Your PHP code is not catching that exception (i.e. it’s not in a
try{}
block with an appropriatecatch(){}
block), and uncaught exceptions are fatal.
You can’t do much about the first one, as mentioned in the other answer. So, you can fix it either by changing your
mysqli_report(...)
setting toMYSQLI_REPORT_STRICT
orMYSQLI_REPORT_OFF
(or indeed anything other thanMYSQLI_REPORT_ALL
), or in combination with this, by properly by usingtry{}
andcatch(){}
appropriately within your code.
Originally posted 2013-11-23 19:34:06.