[英]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 */
然后對adjective
、 noun
、 subject
和verb
重復此操作。
這是一項乏味的工作。 代碼看起來會填充。 那么我們為什么不創建一個函數,它可以對鍵入的數據、表名和列名進行參數化。 這是一種更好的方法,因為它們以相同的模式運行。
<?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.