[英]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.