2017-09-15 2 views
0

I는 $ MyDate가 변수 배열에 와서 여러 값을 가질 수있다, 그러나 지금 MySQL 데이터베이스MySQL의 PHP를 삽입 여러 행이

if (isset($_POST['horaseguinte'])){ 
    $horaseguinte = $_POST['horaseguinte']; 
    $sql="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$mydate', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala'),(NULL, '$mydate', '$horaseguinte', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
}else{ 
    $horaseguinte=""; 
    $sql="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$mydate', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
} 
if (!mysqli_query($con,$sql)) 
    { 
     $erro = true; 
     $erromessage = "Error: " . mysqli_error($con); 
    } 
$id = mysqli_insert_id($con); 
mysqli_close($con); 
} 

에서 레코드를 삽입하는 작동하는 코드가 있습니다. 예를 들면 다음과 같습니다. Array ([0] => 2017-09-20 [1] => 2017-09-27 [2] => 2017-10-04 [3] => 2017-10-11)

if (isset($_POST['horaseguinte'])){ 
    $horaseguinte = $_POST['horaseguinte']; 
    for($i = 0; $i < count($a); $i++) { 
     $sql.="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$a[$i]', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala'),(NULL, '$a[$i]', '$horaseguinte', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
    } 
}else{ 
    $horaseguinte=""; 
    for($i = 0; $i < count($a); $i++) { 
     $sql. = "INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$a[$i]', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
    } 
} 

if (!mysqli_multi_query($con,$sql)) 
    { 
     $erro = true; 
     $erromessage = "Error: " . mysqli_error($con); 
    } 
$id = mysqli_insert_id($con); 

mysqli_close($con); 
} 

을하지만 반환하는 경우 다음과 같은 오류 : 배열 $ a를에 저장되어,이에 코드를 변경 누군가가 도움을 줄 수있는 경우

Catchable fatal error: Object of class mysqli_result could not be converted to string in /home/louros/public_html/material/add_reserva_savemef.php on line 115

내가 감사하겠습니다!

+1

당신의 코드에'line 115'라고 언급하십시오 –

+0

당신의 코드는 SQL 인젝션에도 취약합니다. 이것을 피하기 위해 prepared statement를 사용하십시오. –

+1

mysqli_multi_query의 반환 값은 첫 번째 쿼리의 성공에 불과하다는 점에 유의하십시오. 모든 쿼리의 성공을 위해 루프를 사용해야합니다. 다중 쿼리를 사용하지 말 것을 강력히 권장합니다. – Barmar

답변

1

쿼리를 세미콜론으로 끝내야합니다. mysqli_multi_query 함수의 설명에서 :

Executes one or multiple queries which are concatenated by a semicolon.

그래서 예를 들어, 4 선은 될 것입니다 :

$sql.="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$a[$i]', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala'),(NULL, '$a[$i]', '$horaseguinte', '$userid', '$proj', '$pc', '$col', '$outros', '$sala');"; 

또한, Barmar가 지적했듯이, 모든 쿼리에 대한 mysqli_query의 단일 통화를 사용하는 것이 좋습니다. 이렇게하면 각각의 성공을 확인할 수 있습니다.

관련이 없지만 관련이 있습니다. 쿼리에 $ _POST 값을 직접 삽입하지 마십시오. 이제까지. 이것은 SQL 주입 취약점에 대한 가장 간단한 예입니다. 이를 처리하는 방법은 여러 가지가 있지만 real_escape_string은 시작하는 좋은 방법입니다.