PHP、MySQL在localhost中插入到表中
我对MySQL和PHP非常陌生,在插入到表中时遇到了一些小问题PHP、MySQL在localhost中插入到表中,php,mysql,insert,Php,Mysql,Insert,我对MySQL和PHP非常陌生,在插入到表中时遇到了一些小问题 我已经构建了包含所有MySQL代码的“setup.php”,但我不知道如何正确地包含到“index.php”中 我尝试按如下方式分离代码,但仍然不起作用。我不知道这里有什么问题,是代码本身吗?还是我把它包括进去的方式?请帮我修一下 php,代码就在body元素之后 if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST
- 我已经构建了包含所有MySQL代码的“setup.php”,但我不知道如何正确地包含到“index.php”中李>
- 我尝试按如下方式分离代码,但仍然不起作用。我不知道这里有什么问题,是代码本身吗?还是我把它包括进去的方式?请帮我修一下
if (isset($_POST['name']) &&
isset($_POST['email']) &&
isset($_POST['place']) &&
isset($_POST['level'])) {
include "setup.php";
$name = sanitizeString($_POST['name']);
$email = sanitizeString($_POST['email']);
$place = sanitizeString($_POST['place']);
$level = sanitizeString($_POST['level']);
$query = "INSERT INTO customers VALUES('$name', '$email', '$place', '$level')";
queryMysql($query);
}
setup.php
<?php
$dbhost = 'localhost';
$dbname = 'applicants';
$dbuser = 'root';
$dbpass = 'root';
mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
function createTable($name, $query) {
if (tableExists($name)) {
echo "Table $name already exists";
}
else {
queryMysql("CREATE TABLE $name($query)");
}
}
function tableExists($name) {
$result = queryMysql("SHOW TABLES LIKE $name");
return mysql_num_rows($result);
}
function queryMysql($query) {
$result = mysql_query($query);
return $result;
}
createTable('customers',
'name VARCHAR(16),
email VARCHAR(16),
place VARCHAR(16),
level VARCHAR(16)');
在index.php中,查询应该是
mysql_query($query)
不是queryMysql
另外,请确保插入数据库中的每个字段。如果有自动递增字段或未使用的字段,请使用此语法
INSERT INTO products (column 1, column 2) VALUES (value1, value2)
p、 将您的所有queryMysql更改为mysql\u query()。我相信没有像queryMysql这样的函数(我很久以前就停止使用这个mysql函数了,所以我可能是错的,但是关于mysql\u query(),我确信它会工作) 使用PDO是一种更好的方法:
您有一个充当连接的PDO对象,然后将其传递给函数以进行操作
要点
- PDO支持预先准备好的语句,这样就不需要进行清理(预先准备好的语句会为您做这件事!)
- 插入时,明确声明哪个列得到什么被认为是一种良好的做法,我假定了列的名称,但是如果它们不匹配,您应该更改它们
- 不要回显,抛出异常。抛出异常可以让您更高效、更轻松地处理代码中的问题和错误。您抛出异常并在可能发生的地方捕获它。未捕获(
catch
ed)异常将终止脚本
定义“不起作用”。你有错误吗?发生了什么或没有发生什么?表中不会插入任何内容。然而,我没有得到任何错误。怎么了?使用PDO,这是一个更好的方法。仍然并没有任何东西可以插入到表中。queryMysql是我在setup.php中编写的一个函数!我认为它会起作用?你的代码有很多问题。通过错误报告(-1)打开错误报告;在你剧本的开头。并在更改后更新脚本。请将所有queryMysql更改为mysql\u query()。另外,告诉我们POST变量来自何处。输入的索引和名称是否相同?“…无需“清理”然而,这也增加了绑定的必要性。那有什么好处呢?;-)嗯,你可以绑定一个参数一次,然后更改参数并再次执行,而无需重新绑定/重新初始化。呃,恐怕你有点困惑:)我很好奇,你自己使用过这样的功能吗?当然,在插入大量行时,使用事务和参数绑定非常方便,而且非常高效。啊,对当绑定变量而不是值时,似乎不必重新绑定它们。我的错。然而,我看不出有什么好处,因为这样的大容量插入肯定是在循环中完成的,所以,与转义没有多大区别。
function validatePost($post) {
return (isset($post['name']) &&
isset($post['email']) &&
isset($post['place']) &&
isset($post['level']));
}
function createTable(PDO $pdo, $name, $query) {
if (tableExists($pdo, $name)) {
throw new Exception("Table already exists");
}
$pdo->query("CREATE TABLE $name($query)");
}
function tableExists(PDO $pdo, $name) {
$result = $pdo->query("SHOW TABLES LIKE $name");
return count($result->fetchAll());
}
$dbhost = 'localhost';
$dbname = 'applicants';
$dbuser = 'root';
$dbpass = 'root';
validatePost($_POST);
try {
$pdo = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
createTable($pdo, "customers",
"name VARCHAR(16),
email VARCHAR(16),
place VARCHAR(16),
level VARCHAR(16)");
$stmt = $pdo->prepare("INSERT INTO `customers` (`name`, `email`, `place`, `level`) VALUES(:name, :email, :place, :level)");
$stmt->bindParam(":name", $_POST["name"]);
$stmt->bindParam(":email", $_POST["email"]);
$stmt->bindParam(":place", $_POST["place"]);
$stmt->bindParam(":level", $_POST["level"]);
$stmt->execute();
}
catch (PDOException $e) {
echo "There was an error regarding the Database: " . $e->getMessage();
die();
}
catch (Exception $e) {
echo "Error! " . $e->getMessage();
}