Нужно переделат из PDO на MiSQLI

karen12

Постоялец
Регистрация
26 Фев 2012
Сообщения
109
Реакции
4
Здравствуйте, имею скрипт динамического добавления данных в mysql базу.
Код:
<?php
//insert.php;

if(isset($_POST["item_name"]))
{
$connect = new PDO("mysql:host=localhost;dbname=test", "root", "");

$order_id = uniqid();
for($count = 0; $count < count($_POST["item_name"]); $count++)
{ 
  $query = "INSERT INTO tbl_order_items
  (order_id, item_name, item_quantity, item_unit)
  VALUES (:order_id, :item_name, :item_quantity, :item_unit)
  ";
  $statement = $connect->prepare($query);
  $statement->execute(
   array(
    ':order_id'   => $order_id,
    ':item_name'  => $_POST["item_name"][$count],
    ':item_quantity' => $_POST["item_quantity"][$count],
    ':item_unit'  => $_POST["item_unit"][$count]
   )
  );
}
$result = $statement->fetchAll();
if(isset($result))
{
  echo 'ok';
}
}
?>

Нужно переправить для MYSQLI. Имею подключение к базе вот тагого типа
Код:
 $connect  = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
Помагите решить задачу.
 
Так а в чем проблема поставить PDO модуль для php чтобы не переписывать скрипт?
PDO более современный экстеншн, нежели mysql и дает больше возможностей
 
Так а в чем проблема поставить PDO модуль для php чтобы не переписывать скрипт?
PDO более современный экстеншн, нежели mysql и дает больше возможностей
Да, я понимаю, у меня все запросы на mysqli
 
Да, я понимаю, у меня все запросы на mysqli

Что-то типа
PHP:
$statement = $connect->prepare("INSERT INTO tbl_order_items(order_id, item_name, item_quantity, item_unit) VALUES (?,?,?,?)");
for ($count = 0, $c = count($_POST["item_name"]; $count < $c; $count++)
{
    $order_id = uniqid();
    $statement->bind_param("siis",
        $order_id,
        $_POST["item_name"][$count],
        $_POST["item_quantity"][$count],
        $_POST["item_unit"][$count]);
    $statement->execute();
}

bind_param - почитайте документацию про него.
первый аргумент задает экранировку по типу данных
Для просмотра ссылки Войди или Зарегистрируйся

Проверка на $result у вас неправильная. Работать будет только для последнего запроса

И очень странно выглядит order_id
Не логичнее было бы сделать AUTO_INCREMENT поле для айдишника ордера?
 
Последнее редактирование модератором:
Проверка на $result у вас неправильная. Работать будет только для последнего запроса

И очень странно выглядит order_id
Не логичнее было бы сделать AUTO_INCREMENT поле для айдишника ордера?
Этот скрипт я нашел из интернета. Функционал соответствовал моим требованиям, просто у меня весь скрипт сидит на mysqli, по этому и обратился за помощью.

Что-то типа
PHP:
$statement = $connect->prepare("INSERT INTO tbl_order_items(order_id, item_name, item_quantity, item_unit) VALUES (?,?,?,?)");
for ($count = 0, $c = count($_POST["item_name"]; $count < $c; $count++)
{
    $order_id = uniqid();
    $statement->bind_param("siis",
        $order_id,
        $_POST["item_name"][$count],
        $_POST["item_quantity"][$count],
        $_POST["item_unit"][$count]);
    $statement->execute();
}

bind_param - почитайте документацию про него.
первый аргумент задает экранировку по типу данных
Для просмотра ссылки Войди или Зарегистрируйся

Проверка на $result у вас неправильная. Работать будет только для последнего запроса

И очень странно выглядит order_id
Не логичнее было бы сделать AUTO_INCREMENT поле для айдишника ордера?
Печально, не заработал:(
 
Последнее редактирование модератором:
А какую ошибку выдает?
Ни какую, просто данные не ссодятся в базу

Это index.php
Код:
<?php

# Databse Infomation

// Database Server (localhost)
define("DBHOST","localhost");
// Database Username
define("DBUSER","root");
// Database Password
define("DBPASS","");                           
// Database Name
define("DBNAME","test");                     
                   

# Location Infomation
// Create database connection
   $connect  = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
if ($connect ->connect_error) {
    die("Connection failed: " . $connect ->connect_error);
}



function fill_unit_select_box($connect)
{
$output = '';
$query = "SELECT * FROM tbl_unit ORDER BY unit_name ASC";
$result = $connect->query($query);

foreach($result as $row)
{
  $output .= '<option value="'.$row["unit_name"].'">'.$row["unit_name"].'</option>';
}
return $output;
}

?>
<!DOCTYPE html>
<html>
<head>
  <title>Add Remove Select Box Fields Dynamically using jQuery Ajax in PHP</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
  <br />
  <div class="container">
   <h3 align="center">Add Remove Select Box Fields Dynamically using jQuery Ajax in PHP</h3>
   <br />
   <h4 align="center">Enter Item Details</h4>
   <br />
   <form method="post" id="insert_form">
    <div class="table-repsonsive">
     <span id="error"></span>
     <table class="table table-bordered" id="item_table">
      <tr>
       <th>Enter Item Name</th>
       <th>Enter Quantity</th>
       <th>Select Unit</th>
       <th><button type="button" name="add" class="btn btn-success btn-sm add"><span class="glyphicon glyphicon-plus"></span></button></th>
      </tr>
     </table>
     <div align="center">
      <input type="submit" name="submit" class="btn btn-info" value="Insert" />
     </div>
    </div>
   </form>
  </div>
</body>
</html>

<script>
$(document).ready(function(){
$(document).on('click', '.add', function(){
  var html = '';
  html += '<tr>';
  html += '<td><input type="text" name="item_name[]" class="form-control item_name" /></td>';
  html += '<td><input type="text" name="item_quantity[]" class="form-control item_quantity" /></td>';
  html += '<td><select name="item_unit[]" class="form-control item_unit"><option value="">Select Unit</option><?php echo fill_unit_select_box($connect); ?></select></td>';
  html += '<td><button type="button" name="remove" class="btn btn-danger btn-sm remove"><span class="glyphicon glyphicon-minus"></span></button></td></tr>';
  $('#item_table').append(html);
});
$(document).on('click', '.remove', function(){
  $(this).closest('tr').remove();
});
$('#insert_form').on('submit', function(event){
  event.preventDefault();
  var error = '';
  $('.item_name').each(function(){
   var count = 1;
   if($(this).val() == '')
   {
    error += "<p>Enter Item Name at "+count+" Row</p>";
    return false;
   }
   count = count + 1;
  });
 
  $('.item_quantity').each(function(){
   var count = 1;
   if($(this).val() == '')
   {
    error += "<p>Enter Item Quantity at "+count+" Row</p>";
    return false;
   }
   count = count + 1;
  });
 
  $('.item_unit').each(function(){
   var count = 1;
   if($(this).val() == '')
   {
    error += "<p>Select Unit at "+count+" Row</p>";
    return false;
   }
   count = count + 1;
  });
  var form_data = $(this).serialize();
  if(error == '')
  {
   $.ajax({
    url:"insert.php",
    method:"POST",
    data:form_data,
    success:function(data)
    {
     if(data == 'ok')
     {
      $('#item_table').find("tr:gt(0)").remove();
      $('#error').html('<div class="alert alert-success">Item Details Saved</div>');
     }
    }
   });
  }
  else
  {
   $('#error').html('<div class="alert alert-danger">'+error+'</div>');
  }
});
});
</script>

а это insert.php
Код:
<?php
// Database Server (localhost)
define("DBHOST","localhost");
// Database Username
define("DBUSER","root");
// Database Password
define("DBPASS","");                           
// Database Name
define("DBNAME","test");                     
                   

# Location Infomation
// Create database connection
   $connect  = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
if ($connect ->connect_error) {
    die("Connection failed: " . $connect ->connect_error);
}

$statement = $connect->prepare("INSERT INTO tbl_order_items(order_id, item_name, item_quantity, item_unit) VALUES (?,?,?,?)");
for ($count = 0, $c = count($_POST["item_name"]; $count < $c; $count++)
{
    $order_id = uniqid();
    $statement->bind_param("siis",
        $order_id,
        $_POST["item_name"][$count],
        $_POST["item_quantity"][$count],
        $_POST["item_unit"][$count]);
    $statement->execute();
}
?>
 
Последнее редактирование модератором:
Ни какую, просто данные не ссодятся в базу

Если сделать такой отладочный вывод?
PHP:
var_dump($_POST);
$statement = $connect->prepare("INSERT INTO tbl_order_items(order_id, item_name, item_quantity, item_unit) VALUES (?,?,?,?)");
for ($count = 0, $c = count($_POST["item_name"]; $count < $c; $count++)
{
 $order_id = uniqid();
 $statement->bind_param("siis",
 $order_id,
 $_POST["item_name"][$count],
 $_POST["item_quantity"][$count],
 $_POST["item_unit"][$count]);
 $statement->execute();
 var_dump($stmt->affected_rows);
}
die();
 
Если сделать такой отладочный вывод?
PHP:
var_dump($_POST);
$statement = $connect->prepare("INSERT INTO tbl_order_items(order_id, item_name, item_quantity, item_unit) VALUES (?,?,?,?)");
for ($count = 0, $c = count($_POST["item_name"]; $count < $c; $count++)
{
$order_id = uniqid();
$statement->bind_param("siis",
$order_id,
$_POST["item_name"][$count],
$_POST["item_quantity"][$count],
$_POST["item_unit"][$count]);
$statement->execute();
var_dump($stmt->affected_rows);
}
die();
Сделал вот так
Код:
<?php
// Database Server (localhost)
define("DBHOST","localhost");
// Database Username
define("DBUSER","root");
// Database Password
define("DBPASS","");                           
// Database Name
define("DBNAME","test");                     
                   

# Location Infomation
// Create database connection
   $connect  = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
if ($connect ->connect_error) {
    die("Connection failed: " . $connect ->connect_error);
}

var_dump($_POST);
$statement = $connect->prepare("INSERT INTO tbl_order_items(order_id, item_name, item_quantity, item_unit) VALUES (?,?,?,?)");
for ($count = 0, $c = count($_POST["item_name"]; $count < $c; $count++)
{
$order_id = uniqid();
$statement->bind_param("siis",
$order_id,
$_POST["item_name"][$count],
$_POST["item_quantity"][$count],
$_POST["item_unit"][$count]);
$statement->execute();
var_dump($stmt->affected_rows);
}
die();
?>
результата нету
 
Назад
Сверху