簡體   English   中英

mysqli參數中的空值

[英]null values in mysqli parameters

我的mysql表在許多字段上接受NULL值,我正在更新記錄,而我的桌面應用程序正在按如下方式創建http字符串並發送到php腳本。

www.webpage/script.php?firstval=48.345345&secondval=234&thirdval=&fourthval=simon

在db thirdval上已為NULL,但http字符串中的參數可能包含也可能不包含值

我是否需要:A)將HTTP字符串中的參數作為b)將HTTP字符串中的參數作為c)將php腳本中的null值提供給客戶(d)完全不包括HTTP字符串中的參數否則我的phpscript就像這樣:

 ?php

DEFINE ('DBUSER', 'generic01');
DEFINE ('DBPW', 'genpass');
DEFINE ('DBHOST', 'mysql4.xxxxxxxxx.com'); 
DEFINE ('DBNAME', '_Places');


$dbc = mysqli_connect(DBHOST,DBUSER,DBPW);
if (!$dbc) {
die("Database connection failed: " . mysqli_error($dbc));
exit();
}

$dbs = mysqli_select_db($dbc, DBNAME);
if (!$dbs) {
die(" Database selection bit failed: " . mysqli_error($dbc));
exit();
}
$lat = mysqli_real_escape_string($dbc, $_GET['lat']);
$lng = mysqli_real_escape_string($dbc,$_GET['lng']);
$prox = mysqli_real_escape_string($dbc,$_GET['prox']);
$description = mysqli_real_escape_string($dbc,$_GET['description']);
$id = mysqli_real_escape_string($dbc,$_GET['id']);
$direction = mysqli_real_escape_string($dbc,$_GET['direction']);
$avoiddays = mysqli_real_escape_string($dbc,$_GET['avoiddays']);
$validfrom = mysqli_real_escape_string($dbc,$_GET['validfrom']);
$validto = mysqli_real_escape_string($dbc,$_GET['validto']);
$gefid = mysqli_real_escape_string($dbc,$_GET['gefid']);
$expiry = mysqli_real_escape_string($dbc,$_GET['expiry']);


$query = "UPDATE places SET rt_lat = '$lat',rt_lng= '$lng',rt_prox = '$prox', rt_description = '$description', rt_direction = '$direction',rt_avoiddays = '$avoiddays',rt_validto = '$validto',rt_validfrom = '$validfrom',rt_gefid = '$gefid',rt_expiry='$expiry' WHERE rt_id = '$id'"; 

$result = mysqli_query($dbc, $query) or trigger_error("Query MySQL Error: " . mysqli_error($dbc));


mysqli_close($dbc);
?>

感謝所有幫助,

PHP不了解SQL空值。 如果希望空白/未設置的$ _GET值在數據庫中成為空值,則必須采取特殊步驟:

if(isset($_GET['lat']) || ($_GET['lat'] == '')) {
   $lat = 'NULL'; // a plain PHP string with the word "null" in it
} else {
   $lat = "'" . mysqli_real_escape_string($dbc, $_GET['lat']) . "'"; // note the extra quotes
}

$sql = "INSERT ... VALUES ($lat, ....)"

如果您以其他方式執行此操作,例如(僅作為示例,是的,它容易受到sql注入的攻擊):

$sql = "INSERT ... VALUES ('$_GET[lat]', ...)";

然后對於空的$_GET['lat']您的查詢實際上是

INSERT ... VALUES ('', ...)

並且您將插入一個空字符串,而不是sql null。

您無需將其包含在http請求中,但必須抓住它,否則會收到E_NOTICE錯誤。

對於所有可以為空的字段:

if (isset($_GET['gefid'])) {
  $gefid = mysqli_real_escape_string($dbc,$_GET['gefid']);
} else {
  $gefid = null;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM