Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > ขอท่านอาจารย์ช่วยแก้ไข error ให้หน่อยค่ะ php pdo มือใหม่ค่ะอยากพัฒนาตัวเอง



 

ขอท่านอาจารย์ช่วยแก้ไข error ให้หน่อยค่ะ php pdo มือใหม่ค่ะอยากพัฒนาตัวเอง

 



Topic : 136621



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์




หนูว่าหนูประกาศครบหมดแล้วนะคะ ไม่รู้พลาดตรงไหน

หนูใช้ฐานข้อมูล 2 ตารางค่ะ โดยให้ตรวจสอบว่าถ้าข้อมูลซ้ำให้ขึ้น error แต่ถ้าข้อมูลไม่ซ้ำให้บันทึกลงในตาราง bookout_2565
ซ้ำการทำงานเช็คข้อมูลซ้ำทำงานได้ปกติดีค่ะ แต่ถ้าข้อมูลไม่ซ้ำ มันไม่ยอมบันทึกลงตาราง bookout_2565 ให้แต่จะขึ้นจอขาวก็จะมี error แบบนี้ค่ะ

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\bookout65\aformAdd_db.php:67 Stack trace: #0 C:\xampp\htdocs\bookout65\aformAdd_db.php(67): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\bookout65\aformAdd_db.php on line 67

อันนี้คือหน้า aformAdd.php ซึ่งประกาศตัวแปรงไว้ดังนี้ค่ะ
Code (PHP)
<form action="aformAdd_db.php" method="post">
            <div class="mb-2 row">
                <div class="col-sm-12">
                <select name="type_id" class="form-control" required>
                  <option value="">-เลือกประเภทหนังสือ-</option>
                  <?php
                  $stmt = $conn->prepare("SELECT* FROM typebook");
                  $stmt->execute();
                  $result = $stmt->fetchAll();
                  foreach($result as $row) {
                  ?>
                  <option value="<?= $row['type_id'];?>">-<?= $row['t_name'];?></option>
                <?php } ?>
                </select>
                  </div></div>
            <div class="mb-2 row">
                <div class="col-sm-3">
                <input type="text" name="Numberbk" pattern="[0-9]{1,}" title="กรอกตัวเลขเท่านั้น" class="form-control" required maxlength="5" placeholder="เลขที่หนังสือออก">
              </div>
             <!--  </div>
              <div class="mb-2"> -->
                <div class="col-sm-3">
                  <input type="text" name="Yearbk" class="form-control" readonly="readonly" value="<?php echo thaidate('/Y'); ?>">
                </div>
                <div class="col-sm-6">
                  <input type="text" name="datebk" class="form-control" readonly="readonly" value="<?php echo thaidate('j F Y'); ?>">
                </div>
                </div>
                <div class="mb-2 row">
                <div class="col-sm-12">
                  <input type="text" name="Sudbk" class="form-control" required maxlength="100" placeholder="เรื่อง">
                </div>
                </div>
                <div class="mb-2 row">
                <div class="col-sm-6">
                  <input type="text" name="NameFrom" class="form-control" required maxlength="50"  placeholder="ชื่อผู้ส่ง">
                </div>
                <div class="col-sm-6">
                  <input type="text" name="NameTo" class="form-control" required maxlength="50"  placeholder="ผู้รับ (ชื่อบุคคล/หน่วยงาน)">
                </div>
                </div>
                <div class="mb-2 row">
                <div class="col-sm-3">
                  <input type="text" name="posFrom" class="form-control" required maxlength="50" placeholder="แผนก/สังกัด">
                </div>
                <div class="col-sm-3">
                  <input type="text" name="phonefrom" class="form-control" maxlength="4"  placeholder="เบอร์ติดต่อภายใน">
                </div>
                <div class="col-sm-6">
                  <input type="text" name="phoneto" class="form-control" maxlength="20"  placeholder="เบอร์โทรบุคคล/หน่วยงาน(ที่รับ)">
                </div>
                </div>
                <div class="mb-2 row">
                <div class="col-sm-6">
                  <input type="text" name="nameby" class="form-control" required maxlength="10" placeholder="ชื่อผู้ขอเลข">
                </div>
                
                </div>

                </div>
                <div class="mb-2 row">
                <div class="d-grid gap-2 col-sm-12 mb-3">
                <button type="submit" class="btn btn-primary">เพิ่มข้อมูล</button>
              </div>
            </div>
              </form>
              <h5>รายชื่อพนักงาน</h5>
               <table class="table table-striped  table-hover table-responsive table-bordered">
                        <thead>
                            <tr>
                                <th width="5%">ลำดับ</th>
                                <th width="25%">หนังสือ</th>
                                <th width="25%">เลขที่</th>
                                <th width="25%">ผู้ส่ง</th>
                                <th width="20%">วันที่ขอ</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php
                            $stmtEmp = $conn->prepare("SELECT b.*, t.t_name FROM bookout_2565 AS b INNER JOIN typebook AS t ON b.Typebk=t.type_id ORDER BY b.bookID DESC");
                            $stmtEmp->execute();
                            $resultEmp = $stmtEmp->fetchAll();
                            foreach($resultEmp as $rowEmp) {
                            ?>
                            <tr>
                                <td><?= $rowEmp['bookID'];?></td>
                                <td><?= $rowEmp['t_name'];?></td>
                                <td><?= $rowEmp['Numberbk'];?><?= $rowEmp['Yearbk'];?></td>
                                <td><?= $rowEmp['NameFrom'];?></td>
                                <td><?= $rowEmp['datebk'];?></td>
                            </tr>
                            <?php } ?>
                        </tbody>
                    </table>
 
            </div>
          </div>
        </div>


อันนี้เป็นหน้าตรวจสอบค่ะหลังเพิ่มข้อมูล aformAdd_db.php
Code (PHP)
<?php
 
  //print_r($_POST); 
  //exit();

 if(isset($_POST['Numberbk']) && isset($_POST['Yearbk']) && isset($_POST['datebk']) && isset($_POST['Sudbk'])
 && isset($_POST['NameFrom']) && isset($_POST['NameTo']) && isset($_POST['posFrom']) && isset($_POST['phonefrom'])
 && isset($_POST['phoneto']) && isset($_POST['nameby']) ){
       
    // sweet alert 
    echo '
    <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert-dev.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.css">';
 
    //ฐานข้อมูล
    require_once 'connects/connect.php';
    //$bookID = $_POST['bookID'];
    $Numberbk = $_POST['Numberbk'];
    $Yearbk = $_POST['Yearbk'];
    $datebk = $_POST['datebk'];
    $Sudbk = $_POST['Sudbk'];
    $NameFrom = $_POST['NameFrom'];
    $NameTo = $_POST['NameTo'];
    $posFrom = $_POST['posFrom'];
    $phonefrom = $_POST['phonefrom'];
    $phoneto = $_POST['phoneto'];
    $nameby = $_POST['nameby'];
    //$m_id = $_POST['m_id'];
    
 
    //check 
    $stmt = $conn->prepare("SELECT bookID FROM bookout_2565 WHERE Numberbk = :Numberbk");

    $stmt->execute(array(':Numberbk' => $Numberbk));
    
    if($stmt->rowCount() > 0){
        echo '<script>
                     setTimeout(function() {
                      swal({
                          title: "เลขที่หนังสือออกนี่ถูกใช้ไปแล้ว ",  
                          text: "กรุณาตรวจสอบเลขหนังสือปัจจุบัน",
                          type: ""
                      }, function() {
                          window.location = "aformAdd.php"; 
                      });
                    }, 1000);
              </script>';
              
    }else{ 

              //sql insert
              $stmt = $conn->prepare("INSERT INTO bookout_2565 (Numberbk, Yearbk, datebk, Sudbk, NameFrom, NameTo, posFrom, phonefrom, phoneto, nameby)
                VALUES (:Numberbk, :Yearbk, :datebk, :Sudbk, :NameFrom, :NameTo, :posFrom, :phonefrom, phoneto, :nameby)");

              $stmt->bindParam(':Numberbk', $Numberbk , PDO::PARAM_INT);
              $stmt->bindParam(':Yearbk',   $Yearbk ,   PDO::PARAM_STR);
              $stmt->bindParam(':datebk',   $datebk ,   PDO::PARAM_STR);
              $stmt->bindParam(':Sudbk',    $Sudbk,     PDO::PARAM_STR);
              $stmt->bindParam(':NameFrom', $NameFrom , PDO::PARAM_STR);
              $stmt->bindParam(':NameTo',   $NameTo ,   PDO::PARAM_STR);
              $stmt->bindParam(':posFrom',  $posFrom ,  PDO::PARAM_STR);
              $stmt->bindParam(':phonefrom', $phonefrom, PDO::PARAM_STR);
              $stmt->bindParam(':phoneto',  $phoneto ,  PDO::PARAM_STR);
              $stmt->bindParam(':nameby',   $nameby ,   PDO::PARAM_STR);
              //$stmt->bindParam(':m_id',     $m_id ,     PDO::PARAM_INT);
              $result = $stmt->execute();

              if($result){
                  echo '<script>
                       setTimeout(function() {
                        swal({
                            title: "เพิ่มข้อมูลสำเร็จ",
                            type: ""
                        }, function() {
                            window.location = "afrom.php"; 
                      }, 1000);
                  </script>';
              }else{
                 echo '<script>
                       setTimeout(function() {
                        swal({
                            title: "เกิดข้อผิดพลาด",
                            type: "กรุณาตรวจสอบความถูกต้องหรือตรวจสอบว่าท่านกรอกข้อมูลครบทุกช่อง"
                        }, function() {
                            window.location = "aformAdd.php"; 
                        });
                      }, 1000);
                  </script>';
              }
        } 
    } 
    $conn = null;
    ?>




Tag : PHP, HTML, HTML5, JavaScript, Web Services, XAMPP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2022-03-13 14:42:01 By : sunpatoo View : 2250 Reply : 7
 

 

No. 1



โพสกระทู้ ( 2,311 )
บทความ ( 1 )



สถานะออฟไลน์


ขาด : ไปตัวนึงหรือเปล่าครับ
Code
//sql insert $stmt = $conn->prepare("INSERT INTO bookout_2565 (Numberbk, Yearbk, datebk, Sudbk, NameFrom, NameTo, posFrom, phonefrom, phoneto, nameby) VALUES (:Numberbk, :Yearbk, :datebk, :Sudbk, :NameFrom, :NameTo, :posFrom, :phonefrom, :phoneto, :nameby)");







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-03-13 16:36:59 By : arm8957
 


 
query ไม่ต้อง prepare

Code (PHP)
$sql = 'SELECT ... INNER JOIN ...';

$statement = $pdo->query($sql);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-03-13 16:42:43 By : 009
 

 

No. 3



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


การใช้ prepare จะใช้เมื่อมีการ อ้างอิงตัวแปรจาก การ request เพื่อทำการ escape ตัวแปรนั้นๆ
ถ้าเป็น hard code หรือ constant ที่ไม่มีการนำ ตัวแปร request มาใช้ ก็ไม่จำเป็นต้องใช้ prepare
ใช้คำสั่ง query ตรงๆ เลยก็ได้

ที่นี้ จาก error message
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

แก้ไข
จำนวน ของ parameter ไม่ตรงกับ ที่อ้างอิงใน sql_statement
เช็ค ชื่อ field ให้ดีครับ


ประวัติการแก้ไข
2022-03-13 19:11:30
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-03-13 17:09:03 By : Chaidhanan
 


 

No. 4



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


นอกเรื่องนิด... ในรูป เอาอะไรไปครอบหัวน่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-03-13 18:15:28 By : mr.v
 


 

No. 5



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบกระทู้

ปัญหานี้เจ้าของกระทู้เคยเจอมาก่อนแล้วเป๊ะๆเลยนะ เมื่อปลายปีที่แล้วหรือ 3 เดือนก่อนนี้เอง
https://www.thaicreate.com/php/forum/136541.html

แล้วผมก็แจกเครื่องมือช่วยงานไปให้แล้วด้วย อีกทั้งมีคนชี้จุดบกพร่องแล้วด้วย
เอาเครื่องมือไปใช้ให้เป็นประโยชน์สิครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-03-13 18:18:29 By : mr.v
 


 

No. 6



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์


สอบถามเพิ่มเติมค่ะ อยากทำ INNER JOIN 3 ตาราง เขียนแบบนี้ถูกต้องมั้ยคะ
Code (PHP)
("SELECT b.*, t.t_name, u.* FROM bookout_2565 AS b INNER JOIN typebook AS t 
                                ON b.Typebk=t.type_id INNER JOIN user_emp AS u 
                                ON b.m_id=u.m_id ORDER BY b.bookID DESC ");

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-03-18 14:16:24 By : sunpatoo
 


 

No. 7



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ถูกหรือไม่ลองดูก็ได้ครับ ถุ้ามีเออเร่อร์ ก็ไม่ถูก 55555

Code (SQL)
SELECT b.*, t.t_name, u.*               #select clause
FROM bookout_2565 AS b              #from clause
INNER JOIN typebook AS t ON b.Typebk=t.type_id   #join clause
INNER JOIN user_emp AS u ON b.m_id=u.m_id       #join clause
ORDER BY b.bookID DESC                                       #order clause

มือใหม่เขียน แบ่งวรรคตอน จะได้อ่านแล้วเข้าใจง่ายครับ

หรือเขียนแบบนี้
Code (SQL)
SELECT b.*, t.t_name, u.* 
FROM 
  bookout_2565 AS b, 
  typebook AS t , 
  user_emp AS u 
where 
  b.Typebk=t.type_id 
and b.m_id=u.m_id 
ORDER BY b.bookID DESC

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-03-21 13:12:02 By : Chaidhanan
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอท่านอาจารย์ช่วยแก้ไข error ให้หน่อยค่ะ php pdo มือใหม่ค่ะอยากพัฒนาตัวเอง
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่