2012-06-29 5 views
0

У меня есть старый код mysql, где он успешно вставляет имя файла изображения в базу данных. Но поскольку старый mysql обезглавлен, я попытался сделать то же самое в mysqli (не могу использовать PDO из-за версии PHP, которую я имею). Проблема в том, что я не могу заставить имя файла изображения вставляться в базу данных в mysqli. Что я делаю не так?данные не вставляются в mysqli

Ниже приведен код MySQLi:

<?php 

    session_start(); 


    $username="xxx"; 
    $password="xxx"; 
    $database="mobile_app"; 

     $mysqli = new mysqli("localhost", $username, $password, $database); 

     /* check connection */ 
     if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     die(); 
     } 

    $result = 0; 

if(getimagesize($_FILES['fileImage']['tmp_name'])){ 

    if(is_file("ImageFiles/".$_FILES['fileImage']['name'])) { 
     $parts = explode(".",$_FILES['fileImage']['name']); 
     $ext = array_pop($parts); 
     $base = implode(".",$parts); 
     $n = 2; 

     while(is_file("ImageFiles/".$base."_".$n.".".$ext)) $n++; 
     $_FILES['fileImage']['name'] = $base."_".$n.".".$ext; 

     move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
     "ImageFiles/" . $_FILES["fileImage"]["name"]); 
     $result = 1; 

     $imagesql = "INSERT INTO Image (ImageFile) 
     VALUES (?)"; 

       if (!$insert = $mysqli->prepare($imagesql)) { 
      // Handle errors with prepare operation here 
     } 

     $insert->bind_param("s",'ImageFiles/' . $_FILES['fileImage']['name']); 

    $insert->execute(); 

      if ($insert->errno) { 
       // Handle query error here 
      } 

      $insert->close(); 


    } 
     else 
      { 
      move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
      "ImageFiles/" . $_FILES["fileImage"]["name"]); 
      $result = 1; 

     $imagesql = "INSERT INTO Image (ImageFile) 
     VALUES (?)"; 

       if (!$insert = $mysqli->prepare($imagesql)) { 
      // Handle errors with prepare operation here 
     } 

     $insert->bind_param("s",'ImageFiles/' . $_FILES['fileImage']['name']); 

    $insert->execute(); 

      if ($insert->errno) { 
       // Handle query error here 
      } 

      $insert->close(); 


      } 
    } 
    ?> 

Ниже старый MySQL код, где вставка сделал работа:

<?php 

    session_start(); 


    $username="xxx"; 
    $password="xxx"; 
    $database="mobile_app"; 

    mysql_connect('localhost',$username,$password); 

    mysql_select_db($database) or die("Unable to select database"); 

    $result = 0; 

if(getimagesize($_FILES['fileImage']['tmp_name'])){ 

    if(is_file("ImageFiles/".$_FILES['fileImage']['name'])) { 
     $parts = explode(".",$_FILES['fileImage']['name']); 
     $ext = array_pop($parts); 
     $base = implode(".",$parts); 
     $n = 2; 

     while(is_file("ImageFiles/".$base."_".$n.".".$ext)) $n++; 
     $_FILES['fileImage']['name'] = $base."_".$n.".".$ext; 

     move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
     "ImageFiles/" . $_FILES["fileImage"]["name"]); 
     $result = 1; 

     $imagesql = "INSERT INTO Image (ImageFile) 
     VALUES ('ImageFiles/".mysql_real_escape_string($_FILES['fileImage']['name'])."')"; 

     mysql_query($imagesql); 

    } 
     else 
      { 
      move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
      "ImageFiles/" . $_FILES["fileImage"]["name"]); 
      $result = 1; 

      $imagesql = "INSERT INTO Image (ImageFile) 
      VALUES ('ImageFiles/".mysql_real_escape_string($_FILES['fileImage']['name'])."')"; 

    mysql_query($imagesql); 

      } 

} 
      mysql_close(); 

    ?> 

     <script language="javascript" type="text/javascript"> 
     window.top.stopImageUpload(<?php echo $result ? 'true' : 'false'; ?>, '<?php echo $_FILES['fileImage']['name'] ?>'); 
     </script> 
+0

Вы где-нибудь исправите ошибку? – Jocelyn

+0

Хорошим началом было бы заменить комментарии типа «handle errors here» с фактической обработкой ошибок. Или, по крайней мере, отобразить ошибки. – smoove

+0

дайте мне 5 минут, чтобы проверить наличие ошибок – user1490145

ответ

1

Попробуйте, присвоить значение переменной, а затем связать его , то не строят данные в bind_param:

<?php 
    $imagesql = "INSERT 
        INTO Image (ImageFile) 
        VALUES (?)"; 

    $insert = $mysqli->prepare($imagesql); 

    //Dont pass data directly to bind_param store it in a variable 
    $insert->bind_param("s",$img); 

    //Assign the variable 
    $img = 'ImageFiles/'.$_FILES['fileImage']['name']; 

    $insert->execute(); 
    ?> 

Также вы должны сп eck, если файл загружен, и если какие-либо ошибки произошли с загрузкой перед выполнением каких-либо операций с db:

<?php 
//If POST 
if($_SERVER['REQUEST_METHOD']=='POST'){ 
    //Check no errors on upload 
    if($_FILES['fileImage']['error']==0){ 

     if(isset($_FILES['fileImage']['tmp_name'])){ 
      $imgSize = getimagesize($_FILES['fileImage']['tmp_name']); 
      ... 
      ... 
     } 

    }else{ 
     //get error code and display error 
    } 

}else{ 
    //No POST 
} 
?> 
+0

Отлично, что его отсортировали по:) Спасибо – user1490145

+0

np, рад, что он сработал;) –

Смежные вопросы