PHP: INSERT Into Database Using MySQL [duplicate] - php

This question already has answers here:
How do I escape reserved words used as column names? MySQL/Create Table
(4 answers)
Closed 9 years ago.
I'm running this on my website:
$PlaceOrder = " Insert INTO Order VALUES ( '$CustomerID' , '$ItemID' , '$Quantity' , '$Date' ) ";
$result = mysql_query ($PlaceOrder);
if (!$result)
{
die('Invalid query: ' . mysql_error());
}
But when I ever I do I keep getting the following error message:
Invalid query: 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 'Order VALUES ( '3' , '1' , '12' , '11/05/2013' )' at line 1
I really have no idea what to do now, I tried specifying the columns but that didn't work either. I am very new to this whole thing and I'm executing this based on whats in the manual.

Let's look at your error message again:
[...] the right syntax to use near'OrderVALUES
The first thing it complains about is Order. That's what you substitute the Table from your question for. So let's assume that's your actual table name.
It's also a reserved word. Enclose reserved words in backticks when used as column or table name identifiers.

Order is Key word Just use another word instead of Order

Are you sure there are only 4 columns and are they in the same order as you have specified in your query?
As you suggested try to add the column names, for example:
$PlaceOrder = "INSERT INTO Table (customer, item, quantity, date) VALUES ('$CustomerID', '$ItemID', '$Quantity', '$Date')";
Does this help you?

First of all, you should always specify the columns since you never know when you will have to add new columns to the table and old queries will start doing messy things if you haven't done that.
Having said that, are you sure those are the correct column data types that match the table's?
Also, make sure the date format is valid, you shoud use Y-m-d. You will find more info here.

Related

Php mysql update query is not working? [duplicate]

This question already has an answer here:
Syntax error due to using a reserved word as a table or column name in MySQL
(1 answer)
Closed 6 years ago.
I have a simple update query, but it is not working:
update user set active = 'Y' , delete = 'N' where id = 1;// not working
but if I add a special character which phpmyadmin uses then it is working
update `user` set `active` = 'Y' , `delete` = 'N' where `id` = 1;//its working but its database generated
and there is no difference except the ` special character which is not mandatory.
delete is MySQL reserved keywords.
https://dev.mysql.com/doc/refman/5.7/en/keywords.html
By adding backtick, you are telling MySQL that the word enclosed is not a MySQL keyword but, rather a database name, table name or field name.
Thus, any conflict is avoided.
DELETE is a reserved keyword in SQL. Without escaping it with the backtick character you will get a syntax error and the query will not work.

My SQL QUERY for insert into select statement gives error [duplicate]

This question already has answers here:
PHP, MySQL error: Column count doesn't match value count at row 1
(3 answers)
Closed 6 years ago.
$sql="INSERT INTO `tempahan`(`ic`,`nama`,`tarikh`,`tarikhakhir`,`mula`,`akhir`,`unit`,`bil`,`sebab`) ``SELECT ic, nama
FROM register";`
i use this to select the register column to be inserted in tempahan column.
but it gives me error 'Column count doesn't match value count at row 1'
just insert into the columns you really want to insert into - as the error states, the number of the columns need to be identical:
$sql="INSERT INTO `tempahan`(`ic`,`nama`) (SELECT `ic`, `nama`
FROM `register`)";
update: you can't use VALUES() when using a subquery to get the insert-values. I just corrected this.
Your insert statement for tempahan table provides more columns than you select from register table. Error message clearly says this. Use this:
$sql="INSERT INTO `tempahan`(`ic`,`nama`) ``SELECT ic, nama FROM register";`

PHP - Insert SQL Error [duplicate]

This question already has an answer here:
Syntax error due to using a reserved word as a table or column name in MySQL
(1 answer)
Closed 6 years ago.
Database layout:
rid (auto increment) (primary key) (255)
song (varchar) (120)
artist (varchar) (30)
by(varchar) (33)
key(varchar) (60)
PHP code:
$sql = "INSERT INTO Requests (song,artist,by,key)
VALUES ('$song','$artist','$by','$key')";
if($this->db->query($sql))
{
die("true");
}
echo 'false: ' . $this->db->error;
Error:
false: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'by,key) VALUES ('testsong','testing','kyle','example')' at line 1
Help? I have debuged for ages, I can't see whats wrong with that SQL? Thanks in advance!
You need to use backtick for BY and KEY columns, both are mysql reserve words
$sql = "INSERT INTO Requests (`song`,`artist`,`by`,`key`)
VALUES ('$song','$artist','$by','$key')";
MYSQL Reserve Words List
Side Note:
I suggest you that, please do not use reserve words and keywords for table or column names.
You'll need back ticks for SQL-related names, also by and key are MySQL reserved words:
INSERT INTO Requests (`song`,`artist`,`by`,`key`)
Try this query to insert data in Requests table
$sql = "INSERT INTO Requests (`song`,`artist`,`by`,`key`)
VALUES ('".$song."','".$artist."','".$by."','".$key."')";
if ($this->db->query($sql)) {
die("true");
}
echo 'false: ' . $this->db->error;
the main problem in the asked question's query is apostrophe on both side of column name is missed as (song, artist, by, key) Should be ('song', 'artist', 'by', key')

unable to use full text search with mysql query using MATCH and AGAINST

hope someone can help me. I am trying to use the full search text MATCH and AGAINST.
I am getting this error
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''mytable' WHERE MATCH(user) AGAINST('alex') LIMIT 0, 25' at line 1
my example query is:
SELECT id, user FROM 'mytable' WHERE MATCH(user) AGAINST('alex') LIMIT 0, 25
You can only use backticks around table or column name, you can not use anything except backticks.
SELECT id, user FROM `mytable` WHERE MATCH(user) AGAINST('alex') LIMIT 0, 25
Where backticks required?
If your table or column name contains any MYSQL reserve word than you must need to use backtick around the name.
MYSQL Reserve Keywords and Words
You don't need to quote mytable. DOCS
SELECT id, user FROM mytable WHERE MATCH(user) AGAINST('alex') LIMIT 0, 25
For the error mentioned.
ALTER TABLE mytable ADD FULLTEXT index_name(user);
The fulltext index should contain exactly the same number of columns, in same order as mentioned in MATCH clause.
Here for more.

MySQL error 1064: SQL syntax error in SELECT statement

I am relatively new to somewhat advanced MySQL querying. I had been trying to query the most recent order in an order table of a particular user using MySQL SELECT statement using the following MySQL query.
SELECT o1.* FROM order AS o1
WHERE o1.orderDateTime =
(
SELECT MAX(o2.orderDateTime) FROM order AS o2
WHERE o2.userId = '1'
)
But I had been constantly getting the following MySQL error #1064 related to MySQL syntax.
#1064 - 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 'order AS o1 WHERE o1.orderDateTime = (SELECT MAX(o2.orderDateTime)FROM order AS ' at line 1
I got similar errors in relation with INSERT statements but I managed to fix it up using the methods specified in MySQL 1064: You have an error in your SQL syntax
I made every effort to fix the query in the current case but I was still unsuccessful.
I would be grateful to you if someone can help me out with fixing this MySQL syntax error for SELECT clause specified above. It would be great if someone could specify me the exact reason for the occurrence of this issue, as well.
order is a reserved word and its a bad choice for table name. You need to escape using backticks in the query
SELECT o1.* FROM `order` AS o1
WHERE o1.orderDateTime = (
SELECT MAX(o2.orderDateTime) FROM `order` AS o2
WHERE o2.userId = '1'
)
http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html
As per #Abhik, order is a MySQL keyword.
And you should avoid collapse with two methods:
Use backticks (`) (#Abhik has already explained this.)
Prepend Database name before Table Name e.g.
DataBase_Name.order.
But, still #Abhik's approach is preferable as in case of database name change, you need to change DataBase name in your query.
First of all you could follow #Abhik Chakraborty suggestion to include back ticks around order table name. order is a reserved word in mysql. My suggestion was to improve your sql query. YOu could acomplish the same using:
SELECT o1.* FROM `order` o1
WHERE o1.userId = '1' order by orderDateTime desc limit 1
the subquery seems unnecessary.

Categories