当我使用空数据库运行页面时,它将正确插入数据。当我再次运行页面时,它会显示数据库中已有ID,但无论如何它都会插入它。不确定如何或为什么,但我已经尝试了if语句中的每一个布尔组合,并且无法正确地选择它。
//pass in an ID to compare:
function checkOrderID($orderID) {
//Connect to the database:
$mysqli = new mysqli("localhost", "root", "", "price");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
//Ask the database for some sweet, sweet data:
$stmt1 = "SELECT orderID FROM orders";
$result = $mysqli->query($stmt1);
//flag (we want to believe that there are no similar IDS so lets make it true):
$flag = true;
//while we got some data, display that shit
while ($row = $result->fetch_assoc()) {
//asign data to variable:
$rowOrderID = $row['orderID'];
//Does it match? if it does set the flag to false so it doesnt get inserted.
if ($rowOrderID == $orderID) {
echo "Row ID" . $row["orderID"] . " Passed ID: " . $orderID . "<br>";
echo "This order is already in the database" . "<br>";
$flag = false;
}
}
//hand the flag over to who ever needs it
return flag;
}
if (checkOrderID($orderID) == true) {
//some mysql insert logic here
}
答案 0 :(得分:3)
你为什么要这么复杂?做这样的事情:
$con=mysqli_connect("localhost","root","","price");
$check_query = mysqli_query($con,"SELECT * FROM orders WHERE orderID = $orderID");
if (mysqli_num_rows($check_query) == 0) {
//mysql insert logic here
}
(当然注意到你也会有你的连接逻辑)
注意:您正在以面向对象的方式使用Mysqli
,但在此示例中,我没有使用面向对象的数据库连接方式。必须将连接变量$con
传递给mysqli_query()
方法。
另外......随机附注,但为root mysql用户提供密码通常是个好主意。
答案 1 :(得分:1)
这里有更好和更短,但请尝试全局使用数据库连接,而不是在您的方法中,并尝试使用预准备语句。但除了那些你可以使用以下代码。
//pass in an ID to compare:
function checkOrderID($orderID) {
//Connect to the database: I suggest use global DB connection
$mysqli = new mysqli("localhost", "root", "", "price");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
//gets recodrs based on $orderID passed to this method
$stmt1 = "SELECT * FROM orders where orderID=$orderID"; //Try to use prepared statement
$result = $mysqli->query($stmt1);
//Store number of rows found
$row_count = $result->num_rows;
if($row_count>0){
return true;
}
else{
return false;
}
}