我试图在一个表中选择一行,如果它确实存在于第二个表中,则执行某些操作,如果不存在,则将表1中的值复制到第二个表中。
问题是,一旦找到匹配(第一个和第二个表中存在的行),它就会显示所有其他不匹配的行的错误。
这是错误
Notice: Trying to get property of non-object in C:\wamp\www\loans.php on line 26
这是我的代码
<?php
//error_reporting(0);
$mysqli = new mysqli("localhost", "root", "123456", "test");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$query = "select dest_msisdn,text_message,service_id,sender_name from incoming_sms";
if ($result = $mysqli->query($query)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
$dest_msisdn = $row['dest_msisdn'];
$text_message = $row['text_message'];
$service_id = $row['service_id'];
$sender_name = $row['sender_name'];
/**
Transactions
*/
$m = $mysqli->query("SELECT tel from transactions where tel = $dest_msisdn")->fetch_object()->message;
if(empty($m)){
$ti = "insert into transactions(message,tel) values($text_message,$dest_msisdn)";
$mysqli->query($ti);
}
}
/* free result set */
$result->free();
}
/* close connection */
$mysqli->close();
?>
我想插入在表1中找到的行,而不是在表2中。
答案 0 :(得分:0)
当你按照你所假设的那样连锁时,总会有一排。如果没有一行,你就无法从中得到财产。这就是你得到错误的原因。所以做这样的事情:
$r = $mysqli->query("SELECT tel from transactions where tel = $dest_msisdn");
if ($r->num_rows == 0) {
$ti = "insert into transactions(message,tel) values($text_message,$dest_msisdn)";
$mysqli->query($ti);
}
答案 1 :(得分:0)
我建议您在访问结果产生的任何属性之前检查所产生的行:
$m = $mysqli->query("SELECT tel, message from transactions where tel = $dest_msisdn");
// hi! im missing ^^
// you are accessing the property "message" but its not a selected column in your query
if($m->num_rows <= 0) {
$ti = "insert into transactions(message,tel) values($text_message,$dest_msisdn)";
$mysqli->query($ti);
}
答案 2 :(得分:0)
这不会直接回答您的问题,但它会解决您的问题并可能解决其他问题。
你要插入的方式(首先是SELECT,然后在PHP中循环结果,然后是SELECT
从另一个表,然后是INSERT
)似乎不必要地复杂。您可以摆脱PHP循环,只需在单个SQL语句中执行INSERT
,而无需所有PHP开销。让你的数据库为你工作。
所有这一切:
$query = "select dest_msisdn,text_message,service_id,sender_name from incoming_sms";
if ($result = $mysqli->query($query)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
$dest_msisdn = $row['dest_msisdn'];
$text_message = $row['text_message'];
$service_id = $row['service_id'];
$sender_name = $row['sender_name'];
/**
Transactions
*/
$m = $mysqli->query("SELECT tel from transactions where tel = $dest_msisdn")->fetch_object()->message;
if(empty($m)){
$ti = "insert into transactions(message,tel) values($text_message,$dest_msisdn)";
$mysqli->query($ti);
}
}
/* free result set */
$result->free();
可以改为:
$mysqli->query("INSERT INTO transactions(message,tel) SELECT text_message, tel FROM transactions INNER JOIN incoming_sms on transactions.tel = incoming_sms.dest_msisdn")