Index: src/db.c
==================================================================
--- src/db.c
+++ src/db.c
@@ -332,10 +332,15 @@
 */
 int db_bind_str(Stmt *pStmt, const char *zParamName, Blob *pBlob){
   return sqlite3_bind_text(pStmt->pStmt, paramIdx(pStmt, zParamName),
                           blob_buffer(pBlob), blob_size(pBlob), SQLITE_STATIC);
 }
+
+/* Clear all bindings */
+int db_clear_bindings(Stmt *pStmt){
+  return sqlite3_clear_bindings(pStmt->pStmt);
+}
 
 /*
 ** Step the SQL statement.  Return either SQLITE_ROW or an error code
 ** or SQLITE_OK if the statement finishes successfully.
 */

Index: src/manifest.c
==================================================================
--- src/manifest.c
+++ src/manifest.c
@@ -1184,15 +1184,16 @@
   }
   db_static_prepare(&s1,
     "INSERT INTO mlink(mid,pid,fid,fnid,pfnid,mperm)"
     "VALUES(:m,:p,:f,:n,:pfn,:mp)"
   );
+  db_clear_bindings(&s1);
   db_bind_int(&s1, ":m", mid);
-  db_bind_int(&s1, ":p", pid);
-  db_bind_int(&s1, ":f", fid);
+  if( pid ) db_bind_int(&s1, ":p", pid);
+  if( fid ) db_bind_int(&s1, ":f", fid);
   db_bind_int(&s1, ":n", fnid);
-  db_bind_int(&s1, ":pfn", pfnid);
+  if( pfnid) db_bind_int(&s1, ":pfn", pfnid);
   db_bind_int(&s1, ":mp", mperm);
   db_exec(&s1);
   if( pid && fid ){
     content_deltify(pid, fid, 0);
   }