Это сообщение об ошибке отображается при возникновении ошибки в запросе, которая привела к сбою. Он проявится при использовании:
mysql_fetch_array
/ mysqli_fetch_array()
mysql_fetch_assoc()
/ mysqli_fetch_assoc()
mysql_num_rows()
/ mysqli_num_rows()
Примечание. Эта ошибка вызывает не , если на ваш запрос не влияет строка. Только запрос с недопустимым синтаксисом генерирует эту ошибку.
Шаги устранения неполадок
error_reporting(-1);
. Если у вас есть какие-либо синтаксические ошибки, это укажет вам. mysql_error()
. mysql_error()
сообщит о любых ошибках MySQL, возникающих при выполнении вашего запроса. Пример использования: mysql_connect($host, $username, $password) or die("cannot connect");
mysql_select_db($db_name) or die("cannot select DB");
$sql = "SELECT * FROM table_name";
$result = mysql_query($sql);
if (false === $result) {
echo mysql_error();
}
mysql_real_escape_string()
, чтобы избежать ввода. mysqli_*
и mysql_*
. Они не то же самое и не могут использоваться вместе. Другие советы
mysql_*
функции не должны для нового кода. Они больше не поддерживаются, и сообщество приступило к процессу осушки . Вместо этого вы должны узнать о подготовленных операторах и использовать либо PDO , либо MySQLi . Если вы не можете решить, эта статья поможет выбрать. Если вы хотите узнать, вот хороший учебник PDO .
вы можете достичь этого, используя следующий пример: addBatch & amp; executeBatch для выполнения нескольких SQL-команд одновременно.
Пакетная обработка позволяет группировать связанные операторы SQL в пакет и отправлять их одним вызовом в базу данных. reference
Когда вы отправляете сразу несколько операторов SQL в базу данных, вы уменьшаете объем служебных данных связи, тем самым повышая производительность.
DatabaseMetaData.supportsBatchUpdates()
, чтобы определить, поддерживает ли целевая база данных обработку пакетного обновления. Метод возвращает true, если ваш драйвер JDBC поддерживает эту функцию. executeBatch()
используется для запуска всех операторов, сгруппированных вместе. addBatch()
. Тем не менее, вы не можете выборочно выбирать, какую инструкцию удалить. ПРИМЕР:
import java.sql.*;
public class jdbcConn {
public static void main(String[] args) throws Exception{
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con = DriverManager.getConnection
("jdbc:derby://localhost:1527/testDb","name","pass");
Statement stmt = con.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String insertEmp1 = "insert into emp values
(10,'jay','trainee')";
String insertEmp2 = "insert into emp values
(11,'jayes','trainee')";
String insertEmp3 = "insert into emp values
(12,'shail','trainee')";
con.setAutoCommit(false);
stmt.addBatch(insertEmp1);//inserting Query in stmt
stmt.addBatch(insertEmp2);
stmt.addBatch(insertEmp3);
ResultSet rs = stmt.executeQuery("select * from emp");
rs.last();
System.out.println("rows before batch execution= "
+ rs.getRow());
stmt.executeBatch();
con.commit();
System.out.println("Batch executed");
rs = stmt.executeQuery("select * from emp");
rs.last();
System.out.println("rows after batch execution= "
+ rs.getRow());
}
}
см. http://www.tutorialspoint.com/javaexamples/ jdbc_executebatch.htm
Я не уверен, что вы хотите отправить два оператора SELECT в один запрос, потому что вы не сможете получить доступ к ним ResultSet
s. База данных может возвращать только последний набор результатов.
Несколько ResultSets
Однако, если вы вызываете хранимую процедуру, которая, как вы знаете, может возвращать несколько наборов результатов, что-то вроде этого будет работать
CallableStatement stmt = con.prepareCall(...);
try {
...
boolean results = stmt.execute();
while (results) {
ResultSet rs = stmt.getResultSet();
try {
while (rs.next()) {
// read the data
}
} finally {
try { rs.close(); } catch (Throwable ignore) {}
}
// are there anymore result sets?
results = stmt.getMoreResults();
}
} finally {
try { stmt.close(); } catch (Throwable ignore) {}
}
Несколько операторов SQL
Если вы говорите о нескольких операторах SQL и только одном SELECT, ваша база данных должна поддерживать один String
SQL. Например, я использовал что-то вроде этого в Sybase
StringBuffer sql = new StringBuffer( "SET rowcount 100" );
sql.append( " SELECT * FROM tbl_books ..." );
sql.append( " SET rowcount 0" );
stmt = conn.prepareStatement( sql.toString() );
Это будет зависеть от синтаксиса, поддерживаемого вашей базой данных. В этом примере обратите внимание на добавление spaces
, дополняющее высказывания, чтобы между элементами было пустое пространство.