Я правильно сделал PDO?Первый таймер на подготовленных заявлениях - PullRequest
0 голосов
/ 11 июля 2019

Только что изменил мой предыдущий вопрос, чтобы отразить изменения в PDO, которые все мне говорили делать.Я делаю это правильно?Ошибка отчетности правильно?Все ли в безопасности?

Просто изменил мой предыдущий вопрос, чтобы отразить изменения в PDO, которые все мне предлагали сделать.Я делаю это правильно?Ошибка отчетности правильно?Все ли безопасно?

try{
$connection = new PDO('mysql:host=supertopsecret;dbname=supertopsecret;charset=utf8mb4', 
'supertopsecret', 'supertopsecret');
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

//Query 1 - Insert Provider's Name
//if(isset($_POST['submit'])){ delete this? do I still use this? halp
$stmt1 = $connection->prepare("INSERT INTO 
`providers`(provider_first_name,provider_last_name,date_added)
VALUES (:providerfirstname, :providerlastname, NOW())");

//bind parameters:
  $stmt1->bindParam(':providerfirstname', $providerfirstname);
  $stmt1->bindParam(':providerlastname', $providerlastname);

//insert row
  $providerfirstname = $_POST['providerfirstname'];
  $providerlastname = $_POST['providerlastname'];

  $stmt1->execute();

//Query 2 - Insert Practices
$prov_id = $connection->lastInsertId();
  /*Get all values of practice_name[]:*/
  $practicename = $_POST['practice_name'];
  for ($i = 0; $i < count($practicename); $i++) {
      if ($practicename[$i]) {
          $practice_name_data = $practicename[$i];


      $stmt2 = $connection->prepare("INSERT INTO 
practices(prov_id,practice_name) VALUES (:prov_id,:practice_name)");

      $stmt2->bindParam(':prov_id', $prov_id);
      $stmt2->bindParam(':practice_name', $practice_name_data);

      $stmt2->execute();
     }
  }


echo '<center><h3><br><br><br>Thank you! Your provider has 
successfully been submitted to the database!</center></h3></br>';

} catch(PDOException $e){
echo "Sorry, there was an problem submitting your provider to the 
database. Please try again or copy and paste the error code below to 
the \"Report a Problem\" page and we will try to correct the problem. 
</b></br></br> Error: " . $e->getMessage();
die();
}
$connection = null;

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Проверьте это, это может помочь вам.Используйте PDO для вставки.

$connection = new PDO("mysql:host=xxxx;dbname=xxxx;", "xxxx", "xxxx"); //database connection

for ($i = 0; $i < count($practicename); $i++) {
    if ($practicename[$i]) {
        $practice_name_data = $practicename[$i];

        $statement = $connection->prepare('INSERT INTO practices(prov_id,practice_name) VALUES (:prov_id,:practice_name)');

        $statement->bindParam(':prov_id', $prov_id);
        $statement->bindParam(':practice_name', $practice_name_data);
        // etc.

        $statement->execute();
    }
}
0 голосов
/ 11 июля 2019

Вы должны использовать подготовленные операторы вместо того, чтобы убегать от себя, см. Как я могу предотвратить внедрение SQL в PHP? . Но это, наверное, '$practicename[$i]'. Это будет '{$practicename[$i]}', но проще:

foreach($practicename as $value){
   if($value!=""){
       $value =  mysqli_real_escape_string($connection, $value);
       $query2 = mysqli_query($connection,
       "INSERT INTO `practices`(prov_id,practice_name) 
        VALUES ('$prov_id','$value')");
   }
}

Но опять же, откажитесь от этого и используйте Подготовленные заявления !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...