[英]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.