PDO 2300 upon insert though no rows exist - php

$compost = $dbh->prepare("INSERT INTO `table`
(`PRIMARY`, `some`, `content`, `rows`, `and`, `boolean`)
VALUES ('', :binded, :param, :inputs, :blah, 0)") ;
the primary key iterates automatically and clasicaly this means my inserts do not need to give actual input for that column just ' ' is fine.
However this keeps throwing a 2300 error.
no rows are indexes or keys just the primary and a dumped all the table rows before attempting this script.
So I removed the primary
$compost = $dbh->prepare("INSERT INTO `table`
( `some`, `content`, `rows`, `and`, `boolean`)
VALUES ( :binded, :param, :inputs, :blah, 0)") ;
but it still throws the error, going to make a new table and try that

Leave the primary key if it is auto increment.
$compost = $dbh->prepare("INSERT INTO `table`
(`some`, `content`, `rows`, `and`, `boolean`)
VALUES (:binded, :param, :inputs, :blah, 0)") ;

If your PRIMARY column name is 'PRIMARY' you can try:
$compost = $dbh->prepare("INSERT INTO `table`
(`PRIMARY`, `some`, `content`, `rows`, `and`, `boolean`)
VALUES (PRIMARY, :binded, :param, :inputs, :blah, 0)") ;
or just not to mention that field at all:
$compost = $dbh->prepare("INSERT INTO `table`
(`some`, `content`, `rows`, `and`, `boolean`)
VALUES (:binded, :param, :inputs, :blah, 0)") ;

Related

INSERT INTO SELECT WITH DECLARING OTHER COLUMS VALUE

I just want to ask. what is the problem in here I just want to add some value to the the columns and get other value to the other table. I hope you can help me. I only have the problem in the first 4 value.
Error: INSERT INTO `orders` (`address`, `payment_method`, `contactnumber`, `order_status`, `cart_id`, `user_id`, `item_id`) VALUES ('Bulacan', '','0912312332', 'Pending' ,(SELECT `cart_id`,`user_id`,`item_id` FROM `cart`))
Operand should contain 1 column(s)
$sql = "INSERT INTO `orders` (`address`, `payment_method`, `contactnumber`, `order_status``cart_id`, `user_id`, `item_id`)
VALUES ('$address', '$payment', '$cnumber', '$status'(SELECT `cart_id`,`user_id`,`item_id` FROM `cart`) )";
-Thankyou.
INSERT INTO `orders` (`address`, `payment_method`, `contactnumber`,
`order_status`, `cart_id`, `user_id`, `item_id`)
SELECT 'Bulacan', '','0912312332', 'Pending', `cart_id`,`user_id`,`item_id`
FROM `cart`
WHERE { ??? }

Conversion from MySQL to mysqli not working

I am in a process of converting my Existing MySQL to mysqli
But I can't get this piece of code correct
mysql_query("INSERT INTO `sendmsg`(`sendname`, `recievename`, `subject`, `body` , `mdate`, `mtime`) VALUES ('$sendname','$recievename','$subject','$body','$msgdate','$msgtime')");
$new_id = mysql_insert_id();
mysql_query("INSERT INTO `recievemsg`(`msgid`, `sendname`, `recievename`, `subject`, `body`, `mdate`, `mtime`, `status`) VALUES ($new_id,'$sendname','$recievename','$subject','$body','$msgdate','$msgtime','UNREAD')");
What I tried is given below but didn't work
$mysqli->query("INSERT INTO `sendmsg`(`sendname`, `recievename`, `subject`, `body` , `mdate`, `mtime`) VALUES ('$sendname','$recievename','$subject','$body','$msgdate','$msgtime')");
$new_id = mysqli_insert_id();
$mysqli->query("INSERT INTO `recievemsg`(`msgid`, `sendname`, `recievename`, `subject`, `body`, `mdate`, `mtime`, `status`) VALUES ($new_id,'$sendname','$recievename','$subject','$body','$msgdate','$msgtime','UNREAD')");
The Problem is with the $new_id = mysqli_insert_id(); statement bcoz the first query is executing
For mysqli Object oriented style to get the last inserted id use this
$mysqli->insert_id ;
http://www.php.net/manual/en/mysqli.insert-id.php
So your queries will be as
$mysqli->query("INSERT INTO `sendmsg`(`sendname`, `recievename`, `subject`, `body` , `mdate`, `mtime`) VALUES ('$sendname','$recievename','$subject','$body','$msgdate','$msgtime')");
$new_id = $mysqli->insert_id;
$mysqli->query("INSERT INTO `recievemsg`(`msgid`, `sendname`, `recievename`, `subject`, `body`, `mdate`, `mtime`, `status`) VALUES ($new_id,'$sendname','$recievename','$subject','$body','$msgdate','$msgtime','UNREAD')");

Insert CURRENT_TIMESTAMP with prepared statement

I´m inserting data with prepared statements.
How can I assign a variable to CURRENT_TIMESTAMP and bind the value?
I have a database table with the columns "name, lastfed, lastdoc and id". The 2 columns called lastfed and lastdoc are of type timestamp.
I have a function and once I run it I want lastfed and lastdoc to register the current date and time.
$lastfed = CURRENT_TIMESTAMP;
$lastdoc = CURRENT_TIMESTAMP;
$query = $db->prepare("INSERT INTO test (`name`, `lastfed`, `lastdoc`, `id`) VALUES (?, ?, ?, ?)");
$query->bindValue(1, $name);
$query->bindValue(2, $lastfed);
$query->bindValue(3, $lastdoc);
$query->bindValue(4, $user);
INSERT INTO test (`name`, `lastfed`, `lastdoc`, `id`)
VALUES (?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?)
Or you set CURRENT_TIMESTAMP as default to these columns DB wise. Then you can leave them from your insert statement:
INSERT INTO test (`name`, `id`)
VALUES (?, ?)

how can I add same value in two different tables

i m trying to add custom list of tags using excel file and I have done most of the work. but i am confused that how can I add same value in 2 different tables columns.
i had inserted the values in
INSERT INTO `steve`.`wp_terms` (`term_id`, `name`, `slug`, `term_group`) VALUES (NULL, 'tag99', 'tag99', '0');
and
INSERT INTO `steve`.`wp_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES (NULL, '21', 'post_tag', '', '0', '0');
now i want to add term_id in both table .. could somebody tell me how can i do that?
AND term_id is database generated value.
INSERT INTO `steve`.`wp_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES (NULL, LAST_INSERT_ID, 'post_tag', '', '0', '0');
If I follow correctly your first query inserts into a table and creates a new id for that record, then you want to use that ID in the next query to insert into a different table right? If that's the case the above query should work for your second one using LAST_INSERT_ID for the term_id value.
To update the question with your new code it should, I emphasize should, work with this:
$sql2 = "INSERT INTO " . $table2 . " (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES (NULL, LAST_INSERT_ID, 'post_tag', '', '0', '0')";
$wpdb->query($sql);
$wpdb->query($sql2);
The way you have it above you are overwriting your first query before you execute it.
Also I don't understand how you're inserting nulls into an auto-increment field, that alone should be throwing an error. Honestly both your queries should be leaving their base ids (the auto increment ones) out of the query entirely like this:
$sql2 = "INSERT INTO " . $table2 . " (term_id, taxonomy, description, parent, count) VALUES (LAST_INSERT_ID, 'post_tag', '', '0', '0')";
Use mysql_insert_id()
mysql_query("INSERT INTO `steve`.`wp_terms` (`term_id`, `name`, `slug`, `term_group`) VALUES (NULL, 'tag99', 'tag99', '0')");
$lastInsertId = mysql_insert_id();
mysql_query("INSERT INTO `steve`.`wp_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES (NULL, '" . $lastInsertId . "', 'post_tag', '', '0', '0')");
NOTE: To use mysql_insert_id(), term_id in wp_terms must be set to auto increment.
you need to use ALTER table and add that column's definition/constraints into the other table, here's the manual

Remove same values rows over different column mysql

I 'm stuck on a very basic problem, I want to skip the row which has duplicate values over three columns.
Table feeds
id,type,user_id,friend_id,date
1, 'friend', 4 , 5 , 5/5/2010
2, 'friend', 5 , 4 , 5/5/2010
Now this is how the data is saved (I can't change the saving module)
since both have same thing, so I want to pick them only as a 1 row not 2.
I don't want to validate and remove it at PHP end, b/c if I'll do at PHP the pagination would be disturb
Edit:
Table Structure
create table `feed` (
`id` double ,
`type` blob ,
`user_id` double ,
`type_id` double ,
`date` datetime
);
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('78','friends','1314','1313','2012-09-03 19:48:14');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('79','friends','1313','1314','2012-09-03 19:48:14');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('80','friends','1314','1312','2012-09-03 19:49:07');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('82','friends','1313','1312','2012-09-03 19:49:09');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('84','friends','1315','1312','2012-09-03 19:49:24');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('86','friends','1315','1313','2012-09-03 19:49:33');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('87','friends','1313','1315','2012-09-03 19:49:33');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('97','friends','1317','1312','2012-09-03 19:55:06');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('99','friends','1313','1317','2012-09-03 19:56:01');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('100','friends','1317','1313','2012-09-03 19:56:01');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('101','friends','1315','1317','2012-09-03 19:56:58');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('102','friends','1317','1315','2012-09-03 19:56:58');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('104','following','1313','1193','2012-09-03 19:59:39');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('105','following','1313','1308','2012-09-03 19:59:51');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('106','following','1313','1098','2012-09-03 19:59:58');
And here is the ultimate solution! If the same friendship pair (reversed) exists it only takes the one where user_id>friend_id.
SELECT DISTINCT type, user_id, friend_id, date
FROM table t1
WHERE t1.user_id > t1.friend_id
OR NOT EXISTS (
SELECT * FROM table t2
WHERE t1.type=t2.type AND t1.date=t2.date
AND t2.user_id = t1.friend_id AND t2.friend_id = t1.user_id
)
The function you are looking for is DISTINCT(). That allows you to group the table by that column and remove duplicates.
Just make sure in your select statement that you also select the other field columns as well:
SELECT id, DISTINCT(type), user_id, friend_id, date FROM TABLENAME
You could perform a JOIN on the table itself, which should do what you are looking for.
Something like this might do the trick:
SELECT * FROM tableName a
JOIN tableName b ON a.user_id = b.friend_id
You should get rid of those duplicate records by running:
DELETE FROM table t1 WHERE
EXISTS (
SELECT * FROM table t2
WHERE t1.type=t2.type AND t1.date=t2.date
AND t2.user_id = t1.friend_id AND t2.friend_id = t1.user_id
AND t1.user_id > t2.user_id
)
Then you can get distinct friendship records with:
SELECT DISTINCT type, user_id, friend_id, date FROM table
Also, you can write a DB trigger that fires on INSERT, that checks if a duplicate (with reversed user_id and friend_id) already exists. If exists it does ROLLBACK, else allow INSERT.

Categories