2015-02-26 2 views
0

Я изменил с mysql на mysqli любую команду. Когда я побежал я получил следующее сообщение об ошибке:Ошибка создания таблицы

Error creating table: 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 7

это уведомление:

Notice: Undefined offset: 4 in C:\XAMPP\htdocs\prog_db_mysqli.php on line 41

и предупреждение:

Warning: mysqli_close() expects parameter 1 to be mysqli, boolean given in C:\XAMPP\htdocs\prog_db_mysqli.php on line 47

<?php 
require_once 'reader.php'; 
$data = new Spreadsheet_Excel_Reader(); 
$data->setOutputEncoding('CP1251'); 
$data->read('prog.xls'); 

$con = mysqli_connect("localhost","root","","mynewdb"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

// Create table 
$sql="CREATE TABLE prog_scores(

     pid INT(1), 
     pname VARCHAR(100), 
     py TEXT(4), 
     pcrit VARCHAR(100), 
     pscore DOUBLE(100), 
)"; 

    // Execute query 
if (mysqli_query($con,$sql)) 
{ 
    echo "Table prog_scores created successfully"; 
} 
else 
{ 
     echo "Error creating table: " . mysqli_error($con); 
} 

for($x = 2; $x <= count($data->sheets[0]["cells"]); $x++) 
{ 
     //$sno = $data->sheets[0]["cells"][$x][1]; 
     $pname = $data->sheets[0]["cells"][$x][1]; 
     $py = $data->sheets[0]["cells"][$x][2]; 
     $pcrit = $data->sheets[0]["cells"][$x][3]; 
     $pscore = $data->sheets[0]["cells"][$x][4]; 



     $res = mysqli_query($con,"INSERT INTO prog_scores 
     (pname,pcrit,pscore,py) VALUES  ('$pname','$py','$pcrit','$pscore')"); 
     mysqli_close($res); 
    } 
?> 

Я также проверил php.ini файл в динамических расширений и я изменил с

  ;;;;;;;;;;;;;;;;;;;;;; 
     ; Dynamic Extensions ; 
     ;;;;;;;;;;;;;;;;;;;;;; 

     ; If you wish to have an extension loaded automatically, use the  following 
     ; syntax: 
     ; 
     ; extension=modulename.extension 
     ; 
     ; For example, on Windows: 
     ; 
     ; extension=msql.dll 
     ; 
     ; ... or under UNIX: 
     ; 
     ; extension=msql.so 
     ; 
     ; ... or with a path: 
     ; 
     ; extension=/path/to/extension/msql.so 
     ; 
     ; If you only provide the name of the extension, PHP will look for it in its 
     ; default extension directory. 
     ; 
     ; Windows Extensions 
     ; Note that ODBC support is built in, so no dll is needed for it. 
     ; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5) 
     ; extension folders as well as the separate PECL DLL download (PHP 5). 
     ; Be sure to appropriately set the extension_dir directive. 



     extension=php_bz2.dll 
     extension=php_curl.dll 
     extension=php_mbstring.dll 
     extension=php_exif.dll 
     ;extension=php_fileinfo.dll 
     extension=php_gd2.dll 
     extension=php_gettext.dll 
     ;extension=php_gmp.dll 
     ;extension=php_intl.dll 
     ;extension=php_imap.dll 
     ;extension=php_interbase.dll 
     ;extension=php_ldap.dll 
     ;extension=php_mssql.dll 
     ;extension=php_mbstring.dll 
     ;extension=php_exif.dll  ; Must be after mbstring as it depends on it 
     extension=php_mysql.dll 
     extension=php_mysqli.dll 
    ;extension=php_oci8.dll  ; Use with Oracle 10gR2 Instant Client 
    ;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client 

     extension=php_openssl.dll 
    ;extension=php_pdo_firebird.dll 
     extension=php_pdo_mysql.dll 
    ;extension=php_pdo_oci.dll 
    ;extension=php_pdo_odbc.dll 
    ;extension=php_pdo_pgsql.dll 
     extension=php_pdo_sqlite.dll 
    ;extension=php_pdo_sqlite_external.dll 
    ;extension=php_pgsql.dll 
    ;extension=php_pspell.dll 
    ;extension=php_shmop.dll 

к этому

 ;;;;;;;;;;;;;;;;;;;;;; 
     ; Dynamic Extensions ; 
     ;;;;;;;;;;;;;;;;;;;;;; 

     ; If you wish to have an extension loaded automatically, use the  following 
     ; syntax: 
     ; 
     ; extension=modulename.extension 
     ; 
     ; For example, on Windows: 
     ; 
     ; extension=msql.dll 
     ; 
     ; ... or under UNIX: 
     ; 
     ; extension=msql.so 
     ; 
     ; ... or with a path: 
     ; 
     ; extension=/path/to/extension/msql.so 
     ; 
     ; If you only provide the name of the extension, PHP will look for it in its 
     ; default extension directory. 
     ; 
     ; Windows Extensions 
     ; Note that ODBC support is built in, so no dll is needed for it. 
     ; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5) 
     ; extension folders as well as the separate PECL DLL download (PHP 5). 
     ; Be sure to appropriately set the extension_dir directive. 

     extension=php_mysqli.dll 

, но он не работает. У меня PHP 5.5, и я использую xampp.

ответ

2

Выполняется mysqli_close($res); внутри цикла, сразу после вставки, что означает, что соединение уже было закрыто в следующей итерации цикла.

Вы должны закрыть MySQLi соединение после петлю, а не внутри него

for($x = 2; $x <= count($data->sheets[0]["cells"]); $x++) { 
    .... 

    $res = mysqli_query($con,"INSERT INTO prog_scores 
     (pname,pcrit,pscore,py) VALUES 
     ('$pname','$py','$pcrit','$pscore')"); 
} 
mysqli_close($res); 
-2

Изменить этот

if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

в

if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_errno(); 
} 

Может быть, для вашего 1 Ошибка

+0

Как это отвечает на что-либо? – treegarden

+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования вблизи '),)' в строке 7 Это может помочь устранить эту ошибку. –

+0

Вы должны ответить только на вопрос, когда у вас действительно есть ответ на проблему. Если вы хотите дать некоторые советы, которые могут помочь найти ответ, используйте функцию комментариев. – treegarden

-2

Я просто искал ответ на тот же вопрос, и я действительно не нашел его ... На самом деле ничего плохого в коде, вы должны это знать. Я верю, что, возможно, где-то есть определение, которое должно было сделать это работать таким образом.

я просто попробовать и узнал, что вы должны указать имя базы данных, где имя таблицы в запросе, как это:.

создать таблицу «имя_базы_данных» «yourTableName» (и т.д. ....)

это то, что работает для меня до тех пор, пока я не узнаю, где я могу определить его для работы без укажите имя базы данных , если у кого есть ключ, пожалуйста, сообщите мне.