簡體   English   中英

變量不會插入到 MySQL 表中

[英]Variable won't insert into MySQL table

我有這個腳本,它接受一個變量並將其放入一個表中。 我的 connect.php 文件是正確的並選擇了正確的數據庫,但由於某種原因,該數據不會插入。 它說它成功了,但沒有放在桌子上

我的腳本

if(!empty($_POST['phrase'])){
    $phrase = $_POST['phrase'];
    $phrase = mysql_real_escape_string($phrase);
    $phrase = preg_replace("/[^A-Za-z ]/", "", $phrase);
    $query5 = mysql_query('SELECT phrase FROM dictionary WHERE phrase = "'.$phrase.'" '); // Check the database 


    if(mysql_num_rows($query5)>0){
        null;
    }else{
        echo $phrase;
        $query10 = "INSERT into dictionary(adjective, noun, phrase, subject, verb) values(NULL, NULL, '$phrase', NULL, NULL)";
        $result = mysqli_query($query10); 
        echo "<pre>Debug: $query10</pre>\m";
        //$result = mysqli_query($con, $query);
        if ( false===$result ) {
            printf("error: %s\n");
        }
        else {
            echo 'done.';
        }
        mysqli_close();
    }
    //Debugging Purpose
    echo '<span class="error" > -'. $phrase .'</span>';
}

它與“完成”相呼應。 但表格沒有更新

這是我的桌子的設置方式

-- Database: `dictionary`
--
CREATE DATABASE IF NOT EXISTS `dictionary` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `dictionary`;

-- --------------------------------------------------------

--
-- Table structure for table `adjective`
--

CREATE TABLE IF NOT EXISTS `adjective` (
`id` int(10) NOT NULL,
`adjective` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `adjective` 
--

INSERT INTO `adjective` (`id`, `adjective`) VALUES
(1, 'orange'),
(2, 'blue');

-- --------------------------------------------------------

--
-- Table structure for table `noun`
--

CREATE TABLE IF NOT EXISTS `noun` (
`id` int(10) NOT NULL,
`noun` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `noun`
--

INSERT INTO `noun` (`id`, `noun`) VALUES
(1, 'tamaleh');

-- --------------------------------------------------------

--
-- Table structure for table `phrase`
--

CREATE TABLE IF NOT EXISTS `phrase` (
`id` int(10) NOT NULL,
`phrase` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `phrase`
--

INSERT INTO `phrase` (`id`, `phrase`) VALUES
(0, 'Hello There'),
(1, 'Hello World');

-- --------------------------------------------------------

--
-- Table structure for table `subject`
--

CREATE TABLE IF NOT EXISTS `subject` (
`id` int(10) NOT NULL,
`subject` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `subject`
--

INSERT INTO `subject` (`id`, `subject`) VALUES
(1, 'I'),
(2, 'The');

-- --------------------------------------------------------

--
-- Table structure for table `verb`
--

CREATE TABLE IF NOT EXISTS `verb` (
 `id` int(10) NOT NULL,
 `verb` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `verb`
--

INSERT INTO `verb` (`id`, `verb`) VALUES
(1, 'jumping');

筆記:

讓我們首先重新建立與 MySQL 數據庫的連接:

$con = new mysqli("host", "username", "password", "dictionary"); /* REPLACE NECESSARY DATA INSIDE */

/* CHECK CONNECTION */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

然后檢查表單中的每個POST數據:

if(!empty($_POST["phrase"])){ /* IF SUBMITTED phrase DATA IS NOT EMPTY */

  /* LETS CHECK FIRST IF THE PASSED ON phrase DATA ALREADY EXIST IN THE phrase TABLE */
  if($stmt = $con->prepare("SELECT * FROM phrase WHERE phrase = ?")){
    $stmt->bind_param("s", $_POST["phrase"]); /* BIND THE PASSED ON DATA TO THE QUERY */
    $stmt->execute(); /* EXECUTE THE QUERY */
    $stmt->store_result(); /* STORE THE RESULT */
    $noofphrase = $stmt->num_rows; /* GET THE NUMBER OF RESULTS OF THE EXECUTE QUERY */

      if($noofphrase ==0){ /* IF phrase IS NOT YET IN THE phrase TABLE */
        $stmt2 = $con->prepare("INSERT INTO phrase (phrase) VALUES (?)"); /* START INSERT QUERY */
        $stmt2->bind_param("s", $_POST["phrase"]); /* BIND THE PASSED ON DATA TO THE QUERY */
        $stmt2->execute(); /* EXECUTE THE INSERT QUERY */
        $stmt2->close(); /* CLOSE THE INSERT QUERY PREPARED STATEMENT */
      }

    $stmt->close(); /* CLOSE THE PREPARED STATEMENT */
  } /* END OF PREPARED STATEMENT */

} /* END OF IF phrase IS NOT EMPTY */

然后對adjectivenounsubjectverb重復此操作。

更少乏味和更少的代碼

這是一項乏味的工作。 代碼看起來會填充。 那么我們為什么不創建一個函數,它可以對鍵入的數據、表名和列名進行參數化。 這是一種更好的方法,因為它們以相同的模式運行。

<?php

  function CheckAndInsert ($data, $tablename, $columnname){

    global $con;

    if(!empty($data)){ /* CHECK IF KEYED-IN DATA IS NOT EMPTY */

      /* LETS CHECK FIRST IF THE PASSED ON phrase DATA ALREADY EXIST IN THE phrase TABLE */
      if($stmt = $con->prepare("SELECT * FROM ? WHERE ? = ?")){
        $stmt->bind_param("sss", $tablename, $columnname, $data); /* BIND THE PASSED ON DATA TO THE QUERY */
        $stmt->execute(); /* EXECUTE THE QUERY */
        $stmt->store_result(); /* STORE THE RESULT */
        $noofresult = $stmt->num_rows; /* GET THE NUMBER OF RESULTS OF THE EXECUTE QUERY */

          if($noofresult ==0){ /* IF phrase IS NOT YET IN THE phrase TABLE */
            $stmt2 = $con->prepare("INSERT INTO ? (?) VALUES (?)"); /* START INSERT QUERY */
            $stmt2->bind_param("sss", $tablename, $columnname, $data); /* BIND THE PASSED ON DATA TO THE QUERY */
            $stmt2->execute(); /* EXECUTE THE INSERT QUERY */
            $stmt2->close(); /* CLOSE THE INSERT QUERY PREPARED STATEMENT */
          } /* END OF CHECKING NO OF RESULTS FROM FIRST QUERY */

        $stmt->close(); /* CLOSE THE PREPARED STATEMENT */
      } /* END OF PREPARED STATEMENT */

    } /* END OF CHECKING

  } /* END OF FUNCTION */

?>

所以當用戶提交表單時,只需調用這個函數。

CheckAndInsert($_POST["phrase"], "phrase", "phrase");
CheckAndInsert($_POST["adjective"], "adjective", "adjective");
CheckAndInsert($_POST["noun"], "noun", "noun");
CheckAndInsert($_POST["subject"], "subject", "verb");
CheckAndInsert($_POST["verb"], "subject", "verb");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM