我在使用 Windows 7、WAMP 2.2、MySQL 5.5.16、Apache 2.2.21 和 PHP 5.3.8 的开发环境中查询表单时遇到问题。每次我执行查询时,它都会返回一个错误:
".You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INERT IGNORE INTO users(username, hashed_password, email)VALUES('username','' at line 1 "
我决定将我的问题放在顶部,以便在查看我的代码时更好地引用,也就是说,如果您打算提供帮助,我在下面列出了每个源代码和文件名,如果您需要更多信息,请告诉我,我会尽快提交。非常感谢大家。
问题 #1:database.php 包含我在此表单中引用的唯一对象类 MySQLDataBase(),当我尝试提交表单数据时,它会将其插入数据库,但是 mysql_query 函数返回 false 而不是 true ,这是它应该做的。我一直在对此进行大量研究,但无法弄清楚我的语法在哪里不好,也无法找出任何其他可能出错的地方。任何帮助将不胜感激,也将不胜感激。我是一个中等水平的 PHP 程序员,还有很多东西要学。我被告知要来这里寻求建议。
问题 #2:如果您注意在 database.php 中,在 MySQLDatabase 类下,有一个名为 query() 的实例函数。当我尝试将它与 user.php 中的静态函数 register_user 一起使用时,它说 MySQL 查询失败:未选择数据库,当它显然被选中时,因为构造函数在声明它的 datbase.php 文件中运行。因此,如果我编写 User::register_user($username, $password, $email),它将返回“MySQL 查询失败:未选择数据库”错误。如果有人足够优雅地帮助我,我将非常感激。
这是导致问题的表单 register.php:
<?php
require_once("../../includes/initialize.php");
f(isset($_POST['register'])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$message = "";
$errors = 0;
if(empty($username)){
$errors++;
$message = "Please enter your username." . "<br />";
} if (empty($password)){
$errors++;
$message .= "Please enter your password." . "<br /";
} if (empty($email)){
$errors++;
$message .= "Please enter your email address." . "<br />";
} if (strlen($username) > 15 || strlen($password) > 15 || strlen($email) > 32 ){
$errors++;
$message .= "You entered too many characters for your username/password/email";
} if ($errors > 0){
echo $message;
}
if($errors == 0){
$username = $database->escape_value(trim(htmlentities($_POST['username'])));
$password = $database->escape_value(trim(htmlentities($_POST['password'])));
$email = $database->escape_value(trim(htmlentities($_POST['email'])));
$hashed_password = hash('whirlpool', $password);
$sql = "INSER INTO users(username, hashed_password, email)";
$sql .= "VALUES('{$username}','{$hashed_password}','{$email}')";
$resource = mysql_query($sql);
if( $resource ){
//log_action('Registered', "{$found_user->username} registered.");
echo "User successfully registered " . "<br />" . "<a href = \"login.php\">Login Now!</a>";
} else {
echo "Registration failed please try again later." . mysql_error();
}
} // end if($errors == 0)
}//end if(isset($_POST['resiter']))
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Resister</title>
</head>
<body>
<div>
<p>Please enter your registration information:</p><br />
<form id = "loginForm" action = "register.php" method = "POST" /><br />
<input type = "username" name = "username" value = "" maxlength = "15" /><br />
<input type = "password" name = "password" value = "" maxlength = "15" /><br />
<input type = "email" name = "email" value = "" maxlength = "32" /><br />
<input type = "submit" name = "register" value = "Register!" /><br />
</form>
<a href = "login.php">Login Now!</a>
</div>
</body>
</html>
<?php
$database->close_connection();
?>
这是包含在 register.php 中但仅用于打开连接、选择数据库和关闭连接的 database.php:
<?php
require(LIB_PATH.DS."config.php");
class MySQLDatabase{
private $connection;
public $last_query;
private $magic_quotes_active;
private $real_escape_string_exists;
function __contruct(){
$this->open_connection();
$this->magic_quotes_active = get_magic_quotes_gpc();
$this->real_escape_string_exists = function_exists("mysql_real_escape_string");
}
public function open_connection(){
$this->connection = mysql_connect(DB_SERVER,DB_USER,_DB_PASS);
if(!$this->connection){
die("There was an error connecting to the database: " . mysql_error());
}
$db_select = mysql_select_db(DB_NAME, $this->connection);
if(!$db_select){
die("There was an error selecting the database");
}
}
public function close_connection() {
if(isset($this->connection)){
mysql_close($this->connection);
unset($this->connection);
}
}
public function query($sql="") {
$this->last_query = $sql;
$result = mysql_query($sql);
$this->confirm_query($result);
return $result;
}
public function escape_value( $value ) {
if($this->real_escape_string_exists){
if($this->magic_quotes_active){
$value = stripslashes( $value );
}
$value = mysql_real_escape_string ( $value );
} else {
if (!$this->magic_quotes_active){
$value = addslashes ( $value );
}
}
return $value;
}
public function fetch_array( $result_set ){
return mysql_fetch_array( $result_set );
}
public function num_rows( $result_set ){
return mysql_num_rows( $result_set );
}
public function insert_id(){
return mysql_insert_id($this->connection);
}
public function affected_rows(){
return mysql_affected_rows($this->connection);
}
private function confirm_query( $result ){
if ( !$result ){
die ("MySQL Query failed: " . mysql_error());
}
}
}
$database = new MySQLDatabase();
?>
这是我遇到 query() 函数问题的 user.php:
require_once(LIB_PATH.DS."database.php");
class User extends DatabaseObject {
protected static $table_name="users";
public $id;
public $username;
public $user;
public $password;
public $email;
private $hashed_password;
public $first_name;
public $last_name;
public $value;
public static function authenticate($username="", $password=""){
global $database;
$username = $database->escape_value(htmlentities($username));
$password = $database->escape_value(htmlentities($password));
$hashed_password = hash('whirlpool', $password);
$sql = "SELECT * FROM users";
$sql .= "WHERE username = '{$username}' ";
$sql .= "AND hashed_password = '{$hashed_password}' ";
$sql .= "LIMIT 1";
$result_array = parent::find_by_sql($sql);
return !empty($result_array) ? array_shift($result_array) : false;
}
public function register_user($username="", $password="", $email="") {
global $database;
$username = $database->escape_value(htmlentities($username));
$password = $database->escape_value(htmlentities($password));
$hashed_password = hash('whirlpool', $password);
$email = $database->escape_value(htmlentities($email));
$sql = "INSERT INTO users(username, hashed_password, email)";
$sql .= " VALUES ('{$username}', '{$hashed_password}', '{$email}')";
$database->query($sql);
}
public function full_name() {
if(isset($this->first_name) && isset($this->last_name)) {
return $this->first_name . " " . $this->last_name;
} else {
return "";
}
}
public static function user_exists($user="") {
global $database;
$user = $database->escape_value($user);
$sql = "SELECT * FROM users";
$sql .= "WHERE username = {$username}";
$result_set = parent::find_by_sql($sql);
if( $database->num_rows($result_set) >=1 ) {
return true;
}
}
}
?>
最佳答案
".You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INERT IGNORE INTO users(username, hashed_password, email)VALUES('username','' at line 1 "
你只需要把 INERT 改成 INSERT
关于php - mysql_query 成功返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614147/
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
所以我开始关注ruby,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出
为什么以下不同?Time.now.end_of_day==Time.now.end_of_day-0.days#falseTime.now.end_of_day.to_s==Time.now.end_of_day-0.days.to_s#true 最佳答案 因为纳秒数不同:ruby-1.9.2-p180:014>(Time.now.end_of_day-0.days).nsec=>999999000ruby-1.9.2-p180:015>Time.now.end_of_day.nsec=>999999998
在Ruby1.9.3(可能还有更早的版本,不确定)中,我试图弄清楚为什么Ruby的String#split方法会给我某些结果。我得到的结果似乎与我的预期相反。这是一个例子:"abcabc".split("b")#=>["a","ca","c"]"abcabc".split("a")#=>["","bc","bc"]"abcabc".split("c")#=>["ab","ab"]在这里,第一个示例返回的正是我所期望的。但在第二个示例中,我很困惑为什么#split返回零长度字符串作为返回数组的第一个值。这是什么原因呢?这是我所期望的:"abcabc".split("a")#=>["bc"
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我一直在研究RubyKoans,我发现about_open_classes.rbkoan很有趣。特别是他们修改Integer#even?方法的最后一个测试。我想尝试一下这个概念,所以我打开了Irb并尝试运行Integer.respond_to?(:even?),但令我惊讶的是我得到了错误。然后我尝试了Fixnum.respond_to?(:even?)并得到了错误。我还尝试了Integer.respond_to?(:respond_to?)并得到了true,当我执行2.even?时,我也得到了true。我不知道发生了什么。谁能告诉我缺少什么? 最佳答案
无论时间在哪个时区表示,时区差异是否总是被忽略?直觉上,对于那些使用UTC+2的人来说,从EPOCH开始经过的秒数应该更高。然而,事实并非如此。 最佳答案 Epoch基于utc时区https://en.wikipedia.org/wiki/Unix_time它与您当前所在的时区无关。 关于ruby-Time.to_i是否总是以UTC返回自EPOCH以来的秒数?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.